La API de Route Optimization muestra rutas para vehículos en la ruta para cada solicitud. Los envíos se asignan a vehículos o se pueden omitir según el propiedades de la solicitud.
Un mensaje OptimizeToursResponse
(REST, gRPC) tiene dos mensajes principales de nivel superior.
propiedades:
routes[]
son las rutas de cada vehículo con sus envíos asignados. CadaRoute
contiene métricas que reflejan las propiedades de esa ruta individual.metrics
son métricas agregadas de toda la respuesta, en todos los vehículos y planos de rutas. Las métricas de nivel superior contienen las mismas propiedades que métricas por ruta, con valores agregados en todas las rutas.
Es posible que algunas propiedades no siempre se propaguen según los resultados de la optimización:
skippedShipments[]
enumera los envíos que no realiza ningún vehículo. Se puede omitir un envío si no se puede realizar dentro del plazo especificado restricciones o si el costo de realizar el envío supera el costo de penalización. Por ejemplo, si el retiro o la entrega de un envío tiene un límitetimeWindow
quizás no sea posible o rentable que un vehículo realizar la visita durante el período requerido.validationErrors[]
especifica errores que hacen que la solicitud no sea válida o imposible de resolver cuando lasolvingMode
de la solicitud se establece enVALIDATE_ONLY
En el modoDEFAULT_SOLVE
normal, se producirán errores de validación aparecerá en un mensaje de error, en lugar del cuerpo de la respuesta. Ten en cuenta que El modo de resolución deVALIDATE_ONLY
puede informar varios errores a la vez, que es útil para depurar las solicitudes con rapidez.
Propiedades de la ruta
Cada entrada routes[]
es un mensaje ShipmentRoute
(REST, gRPC). Cada ShipmentRoute
representa la asignación de ruta para un vehículo en particular de la solicitud. Propiedades importantes de ShipmentRoute
relacionadas con su correspondiente
Vehicle
incluyen:
vehicleIndex
es el índice basado en cero deVehicle
en la clase mensaje de solicitud. Las respuestas de REST omiten esta propiedad cuando el valor es cero.vehicleStartTime
es la hora en la que el vehículo debe comenzar su ruta.vehicleEndTime
es el horario en el que se espera que el vehículo termine su ruta.
En una respuesta, routes
se verá de la siguiente manera:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
...
],
"transitions": [
...
],
"metrics": {
...
},
...
}
],
...
}
Cada ShipmentRoute
incluye una lista de pedidos de visits
que el vehículo
que se completó. Cada Visit
(REST, gRPC) representa un VisitRequest
(REST, gRPC) de la solicitud correspondiente. Entre las propiedades importantes de Visit
, se incluyen las siguientes:
shipmentIndex
es el índice basado en cero del envío que pertenece esta visita en la solicitud correspondiente.isPickup
es verdadero cuando una visita es un retiro y falso cuando es una entrega. Las respuestas REST omiten esta propiedad cuando el valor es falso.visitRequestIndex
es el índice basado en cero deVisitRequest
deShipment.pickups
oShipment.deliveries
en la solicitud correspondiente que elVisit
representa. Las respuestas de REST omiten esta propiedad cuando el valor es cero.startTime
es la hora a la que se espera que comience la visita.loadDemands
asigna el tipo de carga a la cantidad de carga demandada para completar laVisit
Las cantidades de carga son negativas para las visitas de entrega, lo que representa la carga retirarse del vehículo.
Un Visit
de ejemplo se ve así:
{
"routes": [
{
...
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
...
],
},
...
],
...
}
Cada ShipmentRoute
incluye una lista ordenada de transitions
que representan
viajar entre visits
para un vehículo determinado. Entre las propiedades importantes del mensaje Transition
(REST, gRPC), se incluyen las siguientes:
startTime
es la hora a la que el vehículo comenzará a realizar la transición.travelDuration
es la duración hasta la cual debe viajar el vehículo. completar la transición.travelDistanceMeters
es la distancia en metros que el vehículo debe viajar para completar la transición.trafficInfoUnavailable
indica si los datos de tráfico están disponibles para la transición.waitDuration
representa el tiempo de inactividad que el vehículo pasa esperando antes de poder iniciar su próximoVisit
. Esto puede deberse a lastart_time
de las Sigues aVisit
.totalDuration
es la duración total de la transición, incluidos los tiempos de desplazamiento, espera, descanso y demora.vehicleLoads
asigna el tipo de carga a la cantidad de carga que transporta el vehículo durante esta transición.
Un Transition
de ejemplo se ve así:
{
"routes": [
{
...
"transitions": [
...
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
...
],
...
}
],
...
}
La relación entre vists
y transitions
se describe en Optimización de pedidos de paradas de retiro y entrega, así como en la documentación de referencia de ShipmentRoute
(REST, gRPC).
Propiedades de las métricas
El mensaje Metrics
(REST, gRPC) resume toda la solución.
Estas son algunas propiedades importantes de Metrics
:
totalCost
es el costo total incurrido por completar las rutas. Más información sobre los costos en Parámetros del modelo de costos.usedVehicleCount
es la cantidad total de vehículos que se usaron en la solución. Los vehículos pueden tener rutas vacías cuando el optimizador determina que su uso no es necesario.skippedMandatoryShipmentCount
es la cantidad de envíos omitidos que se "obligatorio". Un envío obligatorio no especifica unpenaltyCost
que sea si se omite el envío. Los envíos obligatorios todavía pueden omitirse si su rendimiento no es factible según las restricciones especificadas. Obtén más información sobre los costos en Parámetros del modelo de costos.
Las métricas adicionales se informan como mensajes de AggregatedMetrics
(REST,
gRPC). El tipo de mensaje AggregatedMetrics
se usa para lo siguiente:
propiedad Metrics.aggregatedRouteMetrics
y para ShipmentRoute.metrics
La propiedad Metrics.aggregatedRouteMetrics
contiene métricas agregadas de todas
ShipmentRoute
en el OptimizeToursResponse
. Cada ShipmentRoute.metrics
contiene métricas para esa ShipmentRoute
específica.
Entre las propiedades importantes de AggregatedMetrics
, se incluyen las siguientes:
performedShipmentCount
es la cantidad de envíos realizados por los vehículos. en todas sus rutas.travelDuration
es el tiempo total que los vehículos pasan en tránsito mientras completan sus rutas.waitDuration
es el tiempo total que los vehículos permanecen en espera mientras se completan. sus rutas.delayDuration
es el tiempo de retraso total de los vehículos. Por lo general, cero, a menos que se useTransitionAttributes
en la solicitud.breakDuration
es el tiempo total que los vehículos pasan en los recesos. completan sus rutas.visitDuration
es el tiempo total que los vehículos dedican a realizar visitas, mientras que completan sus rutas. Efectivamente, es la suma de todos ValoresVisitRequest.duration
paraVisitRequest
correspondientes aVisit
asignados al vehículo correspondiente.totalDuration
es la duración total necesaria para completar el vehículo rutas.travelDistanceMeters
es la distancia total recorrida por los vehículos, mientras que completan sus rutas.maxLoads
asigna los tipos de carga a la cantidad de carga máxima que transporta el vehículos en cualquier punto de sus rutas.
Un mensaje Metrics
de ejemplo se ve de la siguiente manera:
{
"routes": [
...
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}
Ejemplo completo
Se muestra un ejemplo de respuesta completa para la solicitud de Crea una solicitud. como:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
{
"startTime": "2024-02-13T00:19:31Z",
"detour": "0s"
}
],
"transitions": [
{
"travelDuration": "0s",
"waitDuration": "0s",
"totalDuration": "0s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1151s",
"travelDistanceMeters": 9599,
"waitDuration": "0s",
"totalDuration": "1151s",
"startTime": "2024-02-13T00:19:31Z"
}
],
"metrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"routeCosts": {
"model.vehicles.cost_per_kilometer": 18.603
},
"routeTotalCost": 18.603
}
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}