Если вам нужно решить задачу комивояжёра – построить оптимальный маршрут обхода точек и получить время прибытия в каждую из них – воспользуйтесь методом 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":[[0,1,2],[3,0,4],[5,6,0]]
Матрица для pathMatrix – всегда квадратная, и её размер равен числу точек, которые задаются в задаче.
Пример:
Пусть у нас три точки в задаче. Матрица вида [ [0,1,2],[3,0,4],[5,6,0] ] задает время движения между точками, т.е. за какое время (в минутах) можно добраться из данной точки в 1-ю, 2-ю и 3-ю.
Разберем первый элемент матрицы – [0,1,2]. Чтобы попасть из первой точки в первую точку потребуется 0 минут, чтобы попасть во вторую точку - 1 минута, чтобы попасть в третью точку - 2 минуты.
Для второго элемента матрицы – [3,0,4] – возвращение в 1-ю точку займет 3 минуты, в саму себя попасть за 0 минут, в 3-ю точку – за 4 минуты.
Для третьей точки – [5,6,0] – попасть в 1-ю точку – 5 минут, во 2-ю – 6 минут, в саму себя – 0 минут.
Особенностью данных матриц является то, что по диагонали всегда идут нули (поскольку указано время движения до той же самой точки).
Флаг | Описание |
---|---|
0x01 | учитывать pointSchedules при проложении маршрута |
0x08 | начать прокладывать маршрут из первой точки |
0x10 | завершить маршрут в последней точке |
Флаги представлены 16-ричными числами.
{ success: <bool>, /* 1 - задача решена, все требования выполнены (задаются флагами); */ /* 0 - задача решена, но не все условия выполнены/задача не решена */ order: [ { tm: 0, /* время прибытия, секунды */ tmf: <text>, /* отформатированное время прибытия: "часы:минуты" */ id: 0 /* индекс точки в матрице, начало с 0 */ }, ... /* результаты по обходу других точек */ ] }