Руководство пользователя
Версия 7.5
×

PILOT Routing API (интерфейс маршрутизации)

Содержание:
Режим решения
  • VRP по умолчанию
  • Режим плана
     
Вход
  • Работа
  • Отгрузки
  • Транспорт
  • Заметки
  • Матрицы
     
Выход
  • Код
  • Резюме
  • Маршруты
     
Примеры
  • Использование механизма маршрутизации (OSRM или Openrouteservice)
  • Использование пользовательских матриц
  • Использование -c для выбора ожидаемого времени прибытия и сообщения о нарушениях
 
Заметки:
• ожидаемый порядок для всех массивов координат: [долгота, широта]
• все тайминги указаны в секундах
• все расстояния указаны в метрах
• объект time_window – это пара меток времени в форме [начало, конец]
• устаревшие ключи зачеркнуты
• значения затрат в выходных данных соответствуют целям оптимизации (в настоящее время равны продолжительности).
• «задача» — это работа, самовывоз или доставка
Режим решения
VRP по умолчанию
Режим решения по умолчанию принимает в качестве входных данных описание задачи маршрутизации транспортных средств и выводит набор маршрутов, соответствующих всем ограничениям.
Режим плана
Этот режим, активируемый с помощью -c, направлен на выбор ожидаемого времени прибытия для всех этапов маршрута. Он использует тот же формат ввода, но дополненный описанием ожидаемого маршрута для каждого транспортного средства. Все ограничения во входных данных неявно становятся мягкими ограничениями. Результатом является набор маршрутов, соответствующих ожидаемому описанию, с минимальными нарушениями синхронизации и сообщениями обо всех нарушениях ограничений.
Вход
Описание проблемы считывается из стандартного ввода или из файла (с помощью -i) и должно быть допустимым форматом json, как показано ниже.
 
Key
Description
jobs
массив объектов job, описывающих места для посещения
shipments
массив объектов отгрузки, описывающих задачи по вывозу и доставке
vehicles
массив объектов транспортных средств, описывающих доступные транспортные средства
[matrices]
необязательное описание настраиваемых матриц для каждого профиля
[matrix]
необязательный двумерный массив, описывающий пользовательскую матрицу
 
Работа
Объект задания имеет следующие свойства:
Key
Description
id
целое число
[description]
строка, описывающая эту работу
[location]
массив координат
[location_index]
индекс соответствующей строки и столбца в пользовательских матрицах
[setup]
продолжительность настройки задания (по умолчанию 0)
[service]
продолжительность службы задания (по умолчанию 0)
[amount]
массив целых чисел, описывающих многомерные величины
[delivery]
массив целых чисел, описывающих многомерные количества для доставки
[pickup]
массив целых чисел, описывающих многомерные величины для получения
[skills]
массив целых чисел, определяющих обязательные навыки
[priority]
целое число в диапазоне [0, 100], описывающее уровень приоритета (по умолчанию 0)
[time_windows]
массив объектов time_window, описывающих действительные слоты для запуска службы заданий
 
Сообщается об ошибке, если два объекта задания имеют одинаковый идентификатор.
Отгрузки
Объект отгрузки имеет следующие свойства:
Key
Description
pickup
объект shipment_step, описывающий самовывоз
delivery
объект shipment_step, описывающий доставку
[amount]
массив целых чисел, описывающих многомерные величины
[skills]
массив целых чисел, определяющих обязательные навыки
[priority]
целое число в диапазоне [0, 100], описывающее уровень приоритета (по умолчанию 0)
 
 
Shipment_step аналогичен объекту задания (за исключением редких ключей, уже присутствующих в доставке):
 
Key
Description
id
целое число
[description]
строка, описывающая этот шаг
[location]
массив координат
[location_index]
индекс соответствующей строки и столбца в пользовательских матрицах
[setup]
продолжительность настройки задачи (по умолчанию 0)
[service]
продолжительность службы задачи (по умолчанию 0)
[time_windows]
массив объектов time_window, описывающих действительные слоты для запуска службы задач
 
Сообщается об ошибке, если два объекта доставки (соответственно самовывоза) имеют одинаковый идентификатор.
Транспорт
Объект транспортного средства имеет следующие свойства:
 
Key
Description
id
целое число
[profile]
профиль маршрутизации (по умолчанию автомобиль)
[description]
строка, описывающая это транспортное средство
[start]
массив координат
[start_index]
индекс соответствующей строки и столбца в пользовательских матрицах
[end]
массив координат
[end_index]
индекс соответствующей строки и столбца в пользовательских матрицах
[capacity]
массив целых чисел, описывающих многомерные величины
[skills]
массив целых чисел, определяющих навыки
[time_window]
объект time_window, описывающий рабочее время
[breaks]
массив объектов разрыва
[speed_factor]
двойное значение в диапазоне [0, 5], используемое для масштабирования всего времени в пути транспортного средства (по умолчанию 1.), соблюдаемая точность ограничена двумя знаками после запятой.
[max_tasks]
целое число, определяющее максимальное количество задач в маршруте для данного транспортного средства
[steps]
массив объектов vehicle_step , описывающих пользовательский маршрут для этого транспортного средства
 
Объект разрыва имеет следующие свойства:
Key
Description
id
целое число
time_windows
массив объектов time_window, описывающих действительные интервалы для начала перерыва
[service]
продолжительность перерыва (по умолчанию 0)
[description]
строка, описывающая этот разрыв
 
Сообщается об ошибке, если два объекта перерыва имеют одинаковый идентификатор для одного и того же транспортного средства.
Объект vehicle_step имеет следующие свойства:
 
Key
Description
type
строка (начало, задание, получение, доставка, перерыв или конец)
[id]
id задачи, которая будет выполняться на этом шаге, если значение типа — работа, самовывоз, доставка или перерыв
[service_at]
жесткое ограничение на время обслуживания
[service_after]
жесткое ограничение на нижнюю границу времени обслуживания
[service_before]
жесткое ограничение на верхнюю границу времени обслуживания
Заметки
Расположение задач
Для объектов задания, забора и доставки, если предоставлены настраиваемые матрицы:
• location_index является обязательным.
• местоположение необязательно, но его можно настроить для получения координат в ответе.
 
Если пользовательская матрица не указана:
• в механизм маршрутизации будет отправлен запрос к таблице
• местоположение обязательно
• location_index не имеет значения
 
Расположение транспортных средств
• ключи start и end необязательны для автомобиля, если присутствует хотя бы один из них
• если end не указан, результирующий маршрут остановится на последней посещенной задаче, выбор которой определяется процессом оптимизации
• если start не указан, результирующий маршрут будет начинаться с первой посещенной задачи, выбор которой определяется процессом оптимизации
• чтобы запросить поездку туда и обратно, просто укажите начало и конец с одними и теми же координатами
• в зависимости от того, предоставлены ли пользовательские матрицы, обязательные поля следуют той же логике, что и для ключей заданий, местоположения и местоположения_индекса.
 
Ограничения емкости
Используйте суммы (вместимость для транспортных средств, доставку и вывоз для работ, сумму для отгрузок), чтобы описать проблему с ограничениями вместимости. Эти массивы можно использовать для моделирования пользовательских ограничений сразу для нескольких показателей, например. количество элементов, вес, объем и т. д. Транспортному средству разрешается обслуживать набор задач, только если результирующая нагрузка на каждом этапе маршрута ниже соответствующего значения вместимости для каждого показателя. При использовании нескольких компонентов для сумм рекомендуется сначала ставить наиболее важные/ограничивающие показатели.
Предполагается, что все суммы, связанные с доставкой для работ, загружаются при запуске транспортного средства, а все суммы, связанные с получением работ, возвращаются в конце транспортного средства.
 
Навыки и умения
Используйте навыки для описания проблемы, когда не все задачи могут выполняться всеми транспортными средствами. Рабочие навыки являются обязательными, т. Е. Работа может выполняться только транспортным средством, которое имеет все необходимые навыки. Другими словами: работа j имеет право на транспортное средство v, если j.skills включены в v.skills.
Это определение подразумевает, в частности, что:
• задание без навыков может быть выполнено на любом транспортном средстве;
• машина без навыков может выполнять только задачи без особой необходимости (т.е. тоже без навыков).
Чтобы упростить моделирование проблем, не требующих навыков, не предоставляя ключ навыков по умолчанию для предоставления пустого массива.
 
Приоритеты задач
Полезно в ситуациях, когда не все задачи могут быть выполнены, чтобы получить некоторый контроль над тем, какие задачи не назначены. Установка значения высокого приоритета для некоторых задач будет способствовать их включению в решение в максимально возможной степени по сравнению с задачами с более низким приоритетом.
 
Время настройки задачи
Время установки служит средством описания времени, необходимого для начала выполнения задачи в заданном месте. Это моделирует продолжительность, которую не следует повторно применять для других задач, следующих в том же месте. Таким образом, общее «время действия» для задачи – это настройка + обслуживание по прибытии в новое место или обслуживание только при выполнении новой задачи в предыдущем местоположении транспортного средства
 
Временные окна
Пользователи сами решают, как описывать временные окна:
• относительные значения, например. [0, 14400] для временного окна продолжительностью 4 часа, начиная с начала горизонта планирования. В этом случае все время, указанное в выходных данных с помощью ключа прибытия, относится к началу горизонта планирования;
• абсолютные значения, «реальные» метки времени. В этом случае все время, указанное в выходных данных с помощью ключа прибытия, можно интерпретировать как временные метки.
Отсутствие временного окна во входных данных означает, что временное ограничение не применяется. В частности, транспортное средство без ключа time_window сможет обслуживать любое количество задач, а задача без ключа time_windows может быть включена в любое время на любом маршруте в той мере, в какой это разрешено другими ограничениями, такими как навыки, вместимость и другие. транспортные средства/задачи временные окна.
 
Шаги автомобиля
   В режиме плана
Массив шагов точно описывает порядок маршрутов, который будет создан в ответ. Ключи service_* (необязательные) для объектовvehicle_step используются в качестве дополнительных жестких временных ограничений.
    В режиме решения
Использование шагов для транспортных средств в режиме решения VRP по умолчанию — это способ принудительно начать поиск с соответствующего пользовательского решения, если оно допустимо. В отличие от поведения решения по умолчанию при выполнении нескольких одновременных поисков, это означает, в частности, что выполняется один путь поиска, начиная с предоставленного решения. Таким образом, очевидно, что итоговое качество будет сильно зависеть от заданной пользователем начальной точки.
    В этом контексте:
• только шаги с type=job, pickup или delivery используются для определения начального порядка маршрутов
• ключи service_* не используются
    Ошибка возникает, если для любого из транспортных средств предоставленные шаги описывают маршрут, который недействителен в отношении любого из ограничений.
Матрицы
    Объект матрицы позволяет вводить (непустые) пользовательские матрицы для каждого профиля транспортного средства. Каждая матрица представляет собой массив массивов целых чисел без знака, хранящихся под ключом профиля, а затем под:
• продолжительность для пользовательской матрицы времени в пути, которая будет использоваться для всех проверок временных ограничений;
• затраты для пользовательской матрицы затрат, которая будет использоваться во всех оценках стоимости маршрута.
    Если указано только значение длительности, подразумевается, что его также следует использовать для оценки затрат.
Пример описания различных матриц для разных профилей транспортных средств:
 
Если для всех необходимых значений профиля транспортного средства предоставлены настраиваемые матрицы, свойства местоположения, начала и конца становятся необязательными. Вместо координат во время оптимизации используются обозначения строк и столбцов, предоставленные ключами *_index.
Выход
Вычисленное решение записывается в формате json на стандартный вывод или в файл (с использованием -o) в следующем формате.
 
Key
Description
code
код состояния
error
сообщение об ошибке (присутствующий код iff отличен от 0)
summary
показатели обобщающего решения объекта
unassigned
массив объектов, описывающих неназначенные задачи с их идентификатором, типом и, если указано, описанием, местоположением и индексом местоположения.
routes
массив объектов маршрута
 
Код
Возможные значения кода состояния:
Value
Status
0
ошибка не возникла
1
внутренняя ошибка
2
ошибка ввода
3
ошибка маршрутизации
 
Резюме
Объект сводки имеет следующие свойства:
Key
Description
cost
общая стоимость всех маршрутов
routes
количество маршрутов в решении
unassigned
количество задач, которые не удалось выполнить
setup
общее время настройки для всех маршрутов
service
общее время обслуживания по всем маршрутам
duration
общее время в пути по всем маршрутам
waiting_time
общее время ожидания для всех маршрутов
priority
общая сумма приоритетов для всех назначенных задач
violations
массив объектов нарушения для всех маршрутов
[amount]
общая сумма по всем маршрутам
[delivery]
общая доставка по всем направлениям
[pickup]
общий пикап для всех маршрутов
[distance]*
общее расстояние по всем маршрутам
 
*: предоставляется при использовании флага -g .
Маршруты
Объект маршрута имеет следующие свойства:
Key
Description
vehicle
id транспортного средства, назначенного на этот маршрут
steps
массив ступенчатых объектов
cost
стоимость этого маршрута
setup
общее время настройки для этого маршрута
service
общее время обслуживания данного маршрута
duration
общее время в пути по этому маршруту
waiting_time
общее время ожидания на этом маршруте
priority
общая сумма приоритетов для задач в этом маршруте
violations
массив объектов нарушения для этого маршрута
[amount]
общая сумма для вакансий на этом маршруте
[delivery]
общая доставка для задач в этом маршруте
[pickup]
общий пикап для задач на этом маршруте
[description]
описание транспортного средства, если оно указано во входных данных
[geometry]*
геометрия маршрута с кодировкой полилинии
[distance]*
общая протяженность маршрута
 
*: предоставляется при использовании флага -g .
Шаги
Объект шага имеет следующие свойства:
Key
Description
type
строка (начало, задание, получение, доставка, перерыв или конец)
arrival
предполагаемое время прибытия на этом шаге
duration
суммарное время в пути по прибытии на этот шаг
setup
время установки на этом шаге
service
время обслуживания на этом шаге
waiting_time
время ожидания по прибытии на этот шаг
violations
массив объектов нарушения для этого шага
[description]
описание шага, если оно указано во входных данных
[location]
массив координат для этого шага (если указан во входных данных)
[location_index]
индекс соответствующей строки и столбца в пользовательских матрицах для этого шага (если указан во входных данных)
[id]
идентификатор задачи, выполненной на этом шаге, предоставляется только в том случае, если значение типа — работа, самовывоз, доставка или перерыв
[job]
идентификатор задания, выполненного на этом шаге, предоставляется только в том случае, если значением типа является задание
[load]
нагрузка на транспортное средство после завершения этапа (с ограничениями по грузоподъемности)
[distance]*
пройденное расстояние по прибытии на этот шаг
 
*: предоставляется при использовании флага -g .
Нарушение
Объект нарушения имеет следующие свойства:
Key
Description
cause
строка, описывающая причину нарушения
[duration]
Заблаговременность (соответственно опоздание), если причиной является "lead_time" (соответственно "задержка")
 
Возможные причины нарушения:
• «задержка», если фактический запуск службы не соответствует временному окну задачи и опаздывает на конец временного окна.
• "lead_time", если фактическое начало службы не соответствует временному окну задачи и происходит раньше начала временного окна.
• «загрузка», если загрузка транспортного средства превышает его грузоподъемность.
• "max_tasks", если у транспортного средства больше задач, чем значение max_tasks.
• «навыки», если транспортное средство не обладает всеми необходимыми навыками для выполнения задачи.
• «приоритет», если ограничение приоритета доставки не соблюдается (самовывоз без согласования доставки, доставка до/без согласования получения)
• «missing_break», если в пользовательском маршруте пропущена остановка транспортного средства.
   Примечание о нарушениях: отчетность имеет смысл только при использовании -c для выбора ожидаемого времени прибытия для пользовательских маршрутов, описанных во входных данных, с использованием ключей шагов для транспортного средства. При использовании обычной оптимизации о нарушениях по-прежнему сообщается для согласованности, но они гарантированно недействительны, т. е. массивы нарушений пусты.
 
Примеры
Использование механизма маршрутизации (OSRM или Openrouteservice)
• Входной файл
• Возможный выходной файл
 
Использование пользовательских матриц
• Входной файл
• Возможный выходной файл
 
Использование -c для выбора ожидаемого времени прибытия и сообщения о нарушениях
Пример с маршрутом с избыточной пропускной способностью и один со временем выполнения заказа и задержками.
• Входной файл
• Возможный выходной файл