Оптимизировать маршрут курьера

Если вам нужно решить задачу комивояжёра – построить оптимальный маршрут обхода точек и получить время прибытия в каждую из них – воспользуйтесь методом route/optimize:

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

Параметры

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

PathMatrix

Пример значения:

"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 минут.

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

Flags

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

:!: Флаги представлены 16-ричными числами.

Возвращаемый результат

{
	success: <bool>,	/* 1 - задача решена, все требования выполнены (задаются флагами); */
				/* 0 - задача решена, но не все условия выполнены/задача не решена */
 
	order: [
		   {
			tm: 0,		/* время прибытия, секунды */
			tmf: <text>, 	/* отформатированное время прибытия: "часы:минуты" */
			id: 0		/* индекс точки в матрице, начало с 0 */
  		   },
		   ...		/* результаты по обходу других точек */
	]
}
Follow us on Facebook Gurtam Wialon Twitter Gurtam Wialon info@gurtam.com   |   Copyright © 2002-2022 Gurtam