optimize
Чтобы решить задачу коммивояжера (travelling salesman problem), то есть построить оптимальный маршрут для прохождения всех указанных контрольных точек и получить время прибытия в каждую из них, используйте метод route/optimize:
svc=route/optimize¶ms={
"pathMatrix": [
[<uint>, ...],
...
],
"pointSchedules": [
{
"from": <uint>,
"to": <uint>,
"waitInterval": <uint>
},
...
],
"flags": <uint>
}
Параметры
| Параметр | Описание |
|---|---|
| pathMatrix | Матрица, задающая время движения (в минутах) между точками (см. ниже). |
| pointSchedules | Расписание, задающее время посещения и ожидания для каждой точки. Количество элементов должно совпадать с количеством элементов параметра pathMatrix. |
| from to |
Параметры, задающие интервал времени (в минутах), в течение которого курьер должен посетить точку. |
| waitInterval | Время (в минутах), которое курьер должен ждать в точке после прибытия. |
| flags | Флаги условий задачи (см. ниже). |
pathMatrix
Параметр pathMatrix всегда должен быть квадратной матрицей, размер которой соответствует количеству указанных точек.
Пример:
"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 | Обязательно заканчивать маршрут на последней точке. |
Ответ
Если запрос выполнен успешно, ответ возвращается в следующем формате:
{
"success": <bool>, /* Значение 1 означает, что задача решена и выполнены все условия (заданные флагами). Значение 0 означает, что задача не решена или решена не при всех выполненных условиях. */
"order": [
{
"tm": 0, /* Время прибытия в секундах. */
"tmf": "<text>", /* Отформатированное время прибытия. Пример: "часы:минуты". */
"id": 0 /* Индекс точки в матрице, начиная с 0. */
},
... /* Результаты для остальных точек. */
]
}
Если запрос не выполнен, возвращается код ошибки.
Коды ошибок
| Код ошибки | Описание |
|---|---|
| 4 | Внутренняя ошибка. |
| 7 | Ошибка валидации (неверная структура матрицы, разное количество элементов в параметрах pointSchedules и pathMatrix и т. д.). |