Estructura de respuesta
En este artículo, presentamos la estructura de la respuesta de la Planning API a partir de un ejemplo: la optimización de una ruta de entregas con un centro de distribución (CD), dos clientes (Cliente1 y Cliente2) y un vehículo del tipo VUC. El vehículo sale del CD, carga las dos operaciones, entrega primero en Cliente1, luego en Cliente2, y regresa al CD.
Encuentre más detalles de este ejemplo en Ejemplo 1 – Operaciones con un único vehículo.
La respuesta trae la secuencia de actividades de cada ruta (carga, desplazamientos y entregas), con ventanas de tiempo, distancias y duraciones, además de indicadores consolidados de la solución.
Solicitud
La solicitud a continuación fue utilizada para generar la respuesta de este ejemplo. Los campos de la solicitud están detallados en un artículo específico.
{
"optimizationProfile": "BRAZIL46",
"startDate": 1513750219000,
"legislationProfiles": [
{
"name": "DEFAULT"
}
],
"logisticConstraints": [
{
"name": "DEFAULT",
"siteLoadingFixedTime": 900,
"siteUnloadingFixedTime": 600
}
],
"products": [
{
"name": "DEFAULT"
}
],
"sites": [
{
"name": "Cliente1",
"coordinates": {
"latitude": -23.507608,
"longitude": -46.587145
},
"logisticConstraints": "DEFAULT"
},
{
"name": "Cliente2",
"coordinates": {
"latitude": -23.621059,
"longitude": -46.756193
},
"logisticConstraints": "DEFAULT"
}
],
"depots": [
{
"name": "CD",
"coordinates": {
"latitude": -23.503939,
"longitude": -46.498419
},
"logisticConstraints": "DEFAULT"
}
],
"vehicleTypes": [
{
"name": "VUC",
"maxVolume": 20,
"maxWeight": 1200,
"size": 1
}
],
"vehicles": [
{
"name": "VUC_1",
"vehicleType": "VUC",
"legislationProfile": "DEFAULT",
"availablePeriods": [
{
"departureSite": "CD",
"arrivalSite": "CD",
"timeWindow": {
"start": 1513753200000,
"end": 1513796400000
}
}
]
}
],
"operations": [
{
"id": "P1",
"weight": 100,
"volume": 2,
"product": "DEFAULT",
"type": "DELIVERY",
"depotSite": "CD",
"customerSite": "Cliente1",
"customerTimeWindows": [
{
"start": 1513756800000,
"end": 1513771200000
}
]
},
{
"id": "P2",
"weight": 250,
"volume": 5,
"product": "DEFAULT",
"type": "DELIVERY",
"depotSite": "CD",
"customerSite": "Cliente2",
"customerTimeWindows": [
{
"start": 1513756800000,
"end": 1513771200000
}
]
}
]
}
Respuesta
La respuesta está compuesta por los campos a continuación. Los campos vehicleRoutes e indicators se detallan en las próximas secciones. Algunos campos solo se devuelven en situaciones específicas, como cuando hay operaciones rechazadas o cuando se envían determinados parámetros en la solicitud. Están descritos en las secciones «Campos devueltos solo…».
id– Identificador único de la solución generada;clientId– Identificador del cliente que realizó la solicitud;vehicleRoutes– Lista con las rutas calculadas para cada vehículo;indicators– Indicadores consolidados de la solución.
Campo vehicleRoutes
Cada elemento de la lista representa un vehículo y las rutas realizadas por él en el período disponible.
vehicle– Nombre del vehículo;period– Período de disponibilidad del vehículo utilizado en la solución:timeWindow– Ventana de tiempo del período, constartyend(timestamp en milisegundos);departureSite– Lugar de salida del vehículo;arrivalSite– Lugar de llegada del vehículo;maxRoutesNumber– Cantidad máxima de rutas del vehículo en el período. Se devuelve solo cuando se informa en la solicitud.
routes– Lista de rutas del vehículo:id– Identificador de la ruta;activities– Lista ordenada de las actividades de la ruta:activity– Tipo de la actividad. Los valores posibles son:ROUTE_START– Inicio de la ruta;LOADING– Carga en el depósito;DRIVING– Desplazamiento entre dos lugares;DELIVERY– Entrega al cliente;COLLECTION– Recolección en el cliente;UNLOADING– Descarga;WAITING– Espera;PAUSE– Pausa;REST– Descanso;ROUTE_END– Fin de la ruta.
type– Clasificación de la actividad, siendoSITEpara actividades realizadas en un lugar yDRIVINGpara desplazamientos;timeWindow– Ventana de tiempo en la que ocurre la actividad, constartyend(timestamp en milisegundos);operations– Lista con losidde las operaciones tratadas en la actividad. Queda vacía en actividades comoROUTE_START,DRIVINGyROUTE_END;site– Lugar donde se realiza la actividad. Se devuelve en las actividades del tipoSITE;fixedTimeSite– Tiempo fijo de atención en el lugar, en segundos. Se devuelve en actividades deLOADING,UNLOADING,COLLECTIONyDELIVERY;volume– Volumen de las operaciones tratadas en la actividad. Se devuelve en actividades deLOADING,UNLOADING,COLLECTIONyDELIVERY;weight– Peso de las operaciones tratadas en la actividad. Se devuelve en actividades deLOADING,UNLOADING,COLLECTIONyDELIVERY;departureSite– Lugar de origen del desplazamiento. Se devuelve enDRIVING;arrivalSite– Lugar de destino del desplazamiento. Se devuelve enDRIVING;distance– Distancia recorrida en el desplazamiento, en metros. Se devuelve enDRIVING;nominalDuration– Duración nominal del desplazamiento, en segundos. Se devuelve enDRIVING.
En el ejemplo, la ruta del vehículo VUC_1 sigue esta secuencia de actividades: ROUTE_START en el CD, LOADING de las operaciones P2 y P1, DRIVING hasta Cliente1, DELIVERY de la operación P1, DRIVING hasta Cliente2, DELIVERY de la operación P2, DRIVING de regreso al CD y ROUTE_END.
Campo indicators
Indicadores consolidados de toda la solución. Todos los tiempos se devuelven en segundos y la distancia en metros.
routesNumber– Cantidad de rutas de la solución;rejectOperationsNumber– Cantidad de operaciones rechazadas, es decir, no atendidas por la solución;timeWindowNumber– Cantidad de ventanas de tiempo consideradas en la solución;totalDistance– Distancia total recorrida;totalTime– Tiempo total de las rutas;totalWorkingTime– Tiempo total de trabajo:dayWorkingTotalTime– Tiempo de trabajo en período diurno;nightWorkingTotalTime– Tiempo de trabajo en período nocturno.
totalDrivingTime– Tiempo total de desplazamiento;totalServiceTime– Tiempo total de atención en los lugares:totalLoadingTime– Tiempo total de carga;totalDeliveringTime– Tiempo total de entrega;totalUnloadingTime– Tiempo total de descarga;totalCollectingTime– Tiempo total de recolección.
totalWaitingTime– Tiempo total de espera;totalRestTime– Tiempo total de descanso;averageOccupancyRateVolume– Tasa promedio de ocupación del vehículo por volumen, en porcentaje;averageOccupancyRateWeight– Tasa promedio de ocupación del vehículo por peso, en porcentaje.
Campos devueltos solo cuando hay operaciones rechazadas
Cuando el solver no logra atender una o más operaciones, estas se listan en la respuesta junto con las posibles causas.
rejectOperations– Lista con losidde las operaciones rechazadas;possibleCausesOfRejectOperations– Objeto en el que cada clave es elidde una operación rechazada y el valor es la lista de posibles causas del rechazo. Consulte la lista de posibles mensajes devueltos en Operaciones Rechazadas.code– Código de la causa;message– Descripción de la causa.
Campos devueltos solo con trip
routes[].tripId– Identificador de la ruta generada por la Trip API;indicators.tollCosts– Costo total de peajes de la solución.
Campos devueltos solo con compartimentos
routes[].compartmentConfiguration– Nombre de la configuración de compartimentos utilizada en la ruta;routes[].activities[].operationCompartments– Distribución de las operaciones en los compartimentos del vehículo. Se devuelve solo en actividadesLOADING:groupId–idde la operación;compartmentSolutions– Lista de compartimentos utilizados por la operación:compartment– Nombre del compartimento;capacityWeightUsed– Peso asignado al compartimento;capacityVolumeUsed– Volumen asignado al compartimento.
Respuesta completa
La respuesta completa se encuentra a continuación, generada a partir de la solicitud de este ejemplo:
{
"id": "6af70501533ca0240d44adc5",
"clientId": "maplink",
"vehicleRoutes": [
{
"routes": [
{
"id": "NewRoute_1_1",
"activities": [
{
"activity": "ROUTE_START",
"timeWindow": {
"start": 1513754569000,
"end": 1513754569000
},
"type": "SITE",
"site": "CD",
"operations": []
},
{
"activity": "LOADING",
"timeWindow": {
"start": 1513754569000,
"end": 1513755469000
},
"type": "SITE",
"site": "CD",
"fixedTimeSite": 900,
"volume": 7.0,
"weight": 350.0,
"operations": [
"P2",
"P1"
]
},
{
"activity": "DRIVING",
"timeWindow": {
"start": 1513755469000,
"end": 1513756800000
},
"type": "DRIVING",
"operations": [],
"arrivalSite": "Cliente1",
"departureSite": "CD",
"distance": 13410,
"nominalDuration": 1331
},
{
"activity": "DELIVERY",
"timeWindow": {
"start": 1513756800000,
"end": 1513757400000
},
"type": "SITE",
"site": "Cliente1",
"fixedTimeSite": 600,
"volume": 2.0,
"weight": 100.0,
"operations": [
"P1"
]
},
{
"activity": "DRIVING",
"timeWindow": {
"start": 1513757400000,
"end": 1513759737000
},
"type": "DRIVING",
"operations": [],
"arrivalSite": "Cliente2",
"departureSite": "Cliente1",
"distance": 26603,
"nominalDuration": 2337
},
{
"activity": "DELIVERY",
"timeWindow": {
"start": 1513759737000,
"end": 1513760337000
},
"type": "SITE",
"site": "Cliente2",
"fixedTimeSite": 600,
"volume": 5.0,
"weight": 250.0,
"operations": [
"P2"
]
},
{
"activity": "DRIVING",
"timeWindow": {
"start": 1513760337000,
"end": 1513763220000
},
"type": "DRIVING",
"operations": [],
"arrivalSite": "CD",
"departureSite": "Cliente2",
"distance": 34654,
"nominalDuration": 2883
},
{
"activity": "ROUTE_END",
"timeWindow": {
"start": 1513763220000,
"end": 1513763220000
},
"type": "SITE",
"site": "CD",
"operations": []
}
]
}
],
"vehicle": "VUC_1",
"period": {
"timeWindow": {
"start": 1513753200000,
"end": 1513796400000
},
"departureSite": "CD",
"arrivalSite": "CD"
}
}
],
"indicators": {
"totalServiceTime": 2100,
"totalDeliveringTime": 1200,
"dayWorkingTotalTime": 8651,
"nightWorkingTotalTime": 0,
"totalUnloadingTime": 0,
"totalWorkingTime": 8651,
"totalCollectingTime": 0,
"timeWindowNumber": 1,
"totalDrivingTime": 6551,
"totalLoadingTime": 900,
"totalTime": 8651,
"totalDistance": 74667,
"averageOccupancyRateVolume": 35.0,
"averageOccupancyRateWeight": 29.17,
"rejectOperationsNumber": 0,
"totalWaitingTime": 0,
"totalRestTime": 0,
"routesNumber": 1
}
}