Справочный центр Wialon

optimize

Чтобы решить задачу коммивояжера (travelling salesman problem), то есть построить оптимальный маршрут для прохождения всех указанных контрольных точек и получить время прибытия в каждую из них, используйте метод route/optimize:

Copied!
svc=route/optimize&params={
  "pathMatrix": [
    [<uint>, ...],
    ...
  ],
  "pointSchedules": [
    {
      "from": <uint>,
      "to": <uint>,
      "waitInterval": <uint>
    },
    ...
  ],
  "flags": <uint>
}

Параметры

Параметр Описание
pathMatrix Матрица, задающая время движения (в минутах) между точками (см. ниже).
pointSchedules Расписание, задающее время посещения и ожидания для каждой точки. Количество элементов должно совпадать с количеством элементов параметра pathMatrix.
from
to
Параметры, задающие интервал времени (в минутах), в течение которого курьер должен посетить точку.
waitInterval Время (в минутах), которое курьер должен ждать в точке после прибытия.
flags Флаги условий задачи (см. ниже).

pathMatrix

Параметр pathMatrix всегда должен быть квадратной матрицей, размер которой соответствует количеству указанных точек.

Пример:

Copied!
"pathMatrix": [[0, 1, 2], [3, 0, 4], [5, 6, 0]]

Эти данные задают время движения (в минутах) между тремя точками. Иными словами, они показывают, сколько времени занимает путь от одной точки до другой.

Рассмотрим каждую строку матрицы.

Первая строка [0, 1, 2] означает:

  • От точки 1 до точки 1: 0 минут
  • От точки 1 до точки 2: 1 минута
  • От точки 1 до точки 3: 2 минуты

Вторая строка [3, 0, 4] означает:

  • От точки 2 до точки 1: 3 минуты
  • От точки 2 до точки 2: 0 минут
  • От точки 2 до точки 3: 4 минуты

Третья строка [5, 6, 0] означает:

  • От точки 3 до точки 1: 5 минут
  • От точки 3 до точки 2: 6 минут
  • От точки 3 до точки 3: 0 минут

В каждой строке всегда есть ноль, так как он обозначает время движения от точки до самой себя.

Flags

Флаги условий задачи представлены в виде шестнадцатеричных значений.

Флаг Описание
0x01 Данные pointSchedules становятся обязательным условием.
0x08 Обязательно начинать маршрут с первой точки.
0x10 Обязательно заканчивать маршрут на последней точке.

Ответ

Если запрос выполнен успешно, ответ возвращается в следующем формате:

Copied!
{
  "success": <bool>,  /* Значение 1 означает, что задача решена и выполнены все условия (заданные флагами). Значение 0 означает, что задача не решена или решена не при всех выполненных условиях. */
  "order": [
    {
      "tm": 0,          /* Время прибытия в секундах. */
      "tmf": "<text>",  /* Отформатированное время прибытия. Пример: "часы:минуты". */
      "id": 0           /* Индекс точки в матрице, начиная с 0. */
    },
    ...                /* Результаты для остальных точек. */
  ]
}

Если запрос не выполнен, возвращается код ошибки.

Коды ошибок

Код ошибки Описание
4 Внутренняя ошибка.
7 Ошибка валидации (неверная структура матрицы, разное количество элементов в параметрах pointSchedules и pathMatrix и т. д.).

Если вы заметили ошибку в тексте, пожалуйста, выделите её и нажмите Ctrl+Enter.