optimize
Para resolver el problema del viajante (travelling salesman problem), es decir, para construir la mejor ruta que permita pasar por todos los puntos de control especificados y obtener la hora de llegada a cada uno de ellos, utilice el método route/optimize:
svc=route/optimize¶ms={
"pathMatrix": [
[<uint>, ...],
...
],
"pointSchedules": [
{
"from": <uint>,
"to": <uint>,
"waitInterval": <uint>
},
...
],
"flags": <uint>
}
Parámetros
| Parámetro | Descripción |
|---|---|
| pathMatrix | Matriz que especifica el tiempo de desplazamiento (en minutos) entre los puntos (ver a continuación). |
| pointSchedules | Horario que especifica el tiempo de visita y de espera para cada punto. El número de elementos debe ser igual al número de elementos del parámetro pathMatrix. |
| from to |
Parámetros que definen el intervalo de tiempo (en minutos) dentro del cual el mensajero debe visitar el punto. |
| waitInterval | Tiempo (en minutos) que el mensajero debe esperar en un punto después de llegar. |
| flags | Flags de condición del problema (ver a continuación). |
pathMatrix
El parámetro pathMatrix siempre debe ser una matriz cuadrada, cuyo tamaño corresponde al número de puntos especificados.
Ejemplo:
"pathMatrix": [[0, 1, 2], [3, 0, 4], [5, 6, 0]]
Esta entrada define el tiempo de desplazamiento (en minutos) entre tres puntos. En otras palabras, muestra cuánto tiempo se tarda en viajar de un punto a otro.
Analicemos cada fila de la matriz.
La primera fila [0, 1, 2] significa:
- Del punto 1 al punto 1: 0 minutos
- Del punto 1 al punto 2: 1 minuto
- Del punto 1 al punto 3: 2 minutos
La segunda fila [3, 0, 4] significa:
- Del punto 2 al punto 1: 3 minutos
- Del punto 2 al punto 2: 0 minutos
- Del punto 2 al punto 3: 4 minutos
La tercera fila [5, 6, 0] significa:
- Del punto 3 al punto 1: 5 minutos
- Del punto 3 al punto 2: 6 minutos
- Del punto 3 al punto 3: 0 minutos
Siempre hay un cero en cada fila porque representa el tiempo de viaje de un punto a sí mismo.
Flags
Los flags de condición del problema se representan como valores hexadecimales.
| Flag | Descripción |
|---|---|
| 0x01 | Los datos de pointSchedules se convierten en una condición obligatoria. |
| 0x08 | Es obligatorio iniciar la ruta desde el primer punto. |
| 0x10 | Es obligatorio finalizar la ruta en el último punto. |
Respuesta
Si la solicitud se completa con éxito, la respuesta se devuelve en el siguiente formato:
{
"success": <bool>, /* Un valor de 1 significa que el problema está resuelto y se cumplen todas las condiciones (definidas por los flags). Un valor de 0 significa que el problema no está resuelto, o que se resolvió sin cumplir todas las condiciones. */
"order": [
{
"tm": 0, /* Hora de llegada en segundos. */
"tmf": "<text>", /* Hora de llegada con formato. Ejemplo: "horas:minutos". */
"id": 0 /* Índice del punto en la matriz, empezando desde 0. */
},
... /* Resultados para los demás puntos. */
]
}
Si la solicitud falla, se devuelve un código de error.
Códigos de error
| Código de error | Descripción |
|---|---|
| 4 | Error interno. |
| 7 | Error de validación (estructura de matriz no válida, número diferente de elementos en los parámetros pointSchedules y pathMatrix, etc.). |