ShipmentRoute

La ruta de un vehículo puede desglosarse a lo largo del eje de tiempo de la siguiente manera (suponemos que hay n visitas):

  |            |            |          |       |  T[2], |        |      |
  | Transition |  Visit #0  |          |       |  V[2], |        |      |
  |     #0     |    aka     |   T[1]   |  V[1] |  ...   | V[n-1] | T[n] |
  |  aka T[0]  |    V[0]    |          |       | V[n-2],|        |      |
  |            |            |          |       | T[n-1] |        |      |
  ^            ^            ^          ^       ^        ^        ^      ^
vehicle    V[0].start   V[0].end     V[1].   V[1].    V[n].    V[n]. vehicle
 start     (arrival)   (departure)   start   end      start    end     end

Ten en cuenta que hacemos una diferencia entre lo siguiente:

  • “eventos puntuales”, como el inicio y la finalización del vehículo, y el comienzo y la finalización de cada visita (es decir, de llegada y salida). Ocurren en un segundo determinado.
  • "intervalos de tiempo", como las visitas en sí y la transición entre las visitas. Si bien los intervalos de tiempo a veces pueden tener una duración de cero, es decir, comienzan y terminan en el mismo segundo, a menudo tienen una duración positiva.

Invariantes:

  • Si hay n visitas, hay transiciones de n + 1.
  • Una visita siempre está rodeada por una transición antes de ella (mismo índice) y una transición después de ella (índice + 1).
  • El inicio del vehículo siempre va seguido de la transición #0.
  • La transición #n siempre precede al final del vehículo.

Acerca la imagen. Esto es lo que sucede durante una Transition y una Visit:

---+-------------------------------------+-----------------------------+-->
   |           TRANSITION[i]             |           VISIT[i]          |
   |                                     |                             |
   |  * TRAVEL: the vehicle moves from   |      PERFORM the visit:     |
   |    VISIT[i-1].departure_location to |                             |
   |    VISIT[i].arrival_location, which |  * Spend some time:         |
   |    takes a given travel duration    |    the "visit duration".    |
   |    and distance                     |                             |
   |                                     |  * Load or unload           |
   |  * BREAKS: the driver may have      |    some quantities from the |
   |    breaks (e.g. lunch break).       |    vehicle: the "demand".   |
   |                                     |                             |
   |  * WAIT: the driver/vehicle does    |                             |
   |    nothing. This can happen for     |                             |
   |    many reasons, for example when   |                             |
   |    the vehicle reaches the next     |                             |
   |    event's destination before the   |                             |
   |    start of its time window         |                             |
   |                                     |                             |
   |  * DELAY: *right before* the next   |                             |
   |    arrival. E.g. the vehicle and/or |                             |
   |    driver spends time unloading.    |                             |
   |                                     |                             |
---+-------------------------------------+-----------------------------+-->
   ^                                     ^                             ^
V[i-1].end                           V[i].start                    V[i].end

Por último, aquí te mostramos cómo se pueden organizar los VIAJES, LOS DESCANSO, LA RETRASO y la ESPERA durante una transición.

  • No se superponen.
  • La demora es única y debe ser un período contiguo justo antes de la próxima visita (o la finalización del vehículo). Por lo tanto, es suficiente conocer la duración del retraso para conocer la hora de inicio y finalización.
  • Las PAUSAS son períodos de tiempo contiguos y no superpuestos. La respuesta especifica la hora de inicio y la duración de cada pausa.
  • TRAVEL y WAIT son "interrumpibles": se pueden interrumpir varias veces durante esta transición. Los clientes pueden suponer que el viaje se realiza "lo antes posible". y que "esperar" llena el tiempo restante.

Un ejemplo (complejo):

                               TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
  ||     |       |           |       |           |         |         ||
  ||  T  |   B   |     T     |       |     B     |         |    D    ||
  ||  r  |   r   |     r     |   W   |     r     |    W    |    e    ||
  ||  a  |   e   |     a     |   a   |     e     |    a    |    l    ||
  ||  v  |   a   |     v     |   i   |     a     |    i    |    a    ||
  ||  e  |   k   |     e     |   t   |     k     |    t    |    y    ||
  ||  l  |       |     l     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
Representación JSON
{
  "vehicleIndex": integer,
  "vehicleLabel": string,
  "vehicleStartTime": string,
  "vehicleEndTime": string,
  "visits": [
    {
      object (Visit)
    }
  ],
  "transitions": [
    {
      object (Transition)
    }
  ],
  "hasTrafficInfeasibilities": boolean,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "breaks": [
    {
      object (Break)
    }
  ],
  "metrics": {
    object (AggregatedMetrics)
  },
  "routeCosts": {
    string: number,
    ...
  },
  "routeTotalCost": number
}
Campos
vehicleIndex

integer

Vehículo que realiza la ruta, identificado por su índice en el origen ShipmentModel

vehicleLabel

string

Etiqueta del vehículo que realiza esta ruta, igual a ShipmentModel.vehicles(vehicleIndex).label, si se especifica.

vehicleStartTime

string (Timestamp format)

Hora a la que el vehículo empieza su ruta.

Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: "2014-10-02T15:01:23Z" y "2014-10-02T15:01:23.045123456Z".

vehicleEndTime

string (Timestamp format)

Hora a la que el vehículo finaliza su ruta.

Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: "2014-10-02T15:01:23Z" y "2014-10-02T15:01:23.045123456Z".

visits[]

object (Visit)

Secuencia ordenada de visitas que representa una ruta. visit[i] es la enésima visita de la ruta. Si este campo está vacío, se considerará que el vehículo no está en uso.

transitions[]

object (Transition)

Lista ordenada de transiciones para la ruta.

hasTrafficInfeasibilities

boolean

Cuando la opción OptimizeToursRequest.consider_road_traffic se establece como verdadera, este campo indica que las inconsistencias en los horarios de la ruta se predicen mediante estimaciones de duración de viaje basadas en el tráfico. Es posible que no haya suficiente tiempo para completar los viajes, las demoras y las pausas ajustadas por el tráfico entre las visitas, antes o después de la última visita, sin dejar de cumplir con los horarios de la visita y del vehículo. Por ejemplo:

  startTime(previous_visit) + duration(previous_visit) +
  travelDuration(previous_visit, next_visit) > startTime(next_visit)

Es probable que la llegada a next_visit ocurra después de su período actual debido al aumento en la estimación del tiempo de viaje travelDuration(previous_visit, next_visit) debido al tráfico. Además, una pausa puede verse forzada a superponerse con una visita debido a un aumento en las estimaciones de tiempo de viaje y a las restricciones de los períodos de visitas o interrupciones.

routePolyline

object (EncodedPolyline)

Representación de polilínea codificada de la ruta. Este campo solo se propaga si se establece OptimizeToursRequest.populate_polylines como verdadero.

breaks[]

object (Break)

Pausas programadas para el vehículo que realiza esta ruta La secuencia breaks representa intervalos de tiempo, cada uno de los cuales comienza en el startTime correspondiente y dura duration segundos.

metrics

object (AggregatedMetrics)

Métricas de duración, distancia y carga de esta ruta. Los campos de AggregatedMetrics se suman en todos los ShipmentRoute.transitions o ShipmentRoute.visits, según el contexto.

routeCosts

map (key: string, value: number)

Costo de la ruta, desglosado por campos de solicitudes relacionados con el costo. Las claves son rutas de acceso proto relacionadas con la entrada de OptimizeToursRequest, p.ej., “model.shipments.pickups.cost”, y los valores son el costo total que genera el campo de costo correspondiente, agregado para toda la ruta. En otras palabras, costos["model.shipments.pickups.cost"] es la suma de todos los costos de retiro en la ruta. Todos los costos definidos en el modelo se informan aquí en detalle, excepto los costos relacionados con TransitionAttributes que solo se informan de forma agregada a partir de 2022/01.

Es un objeto que contiene una lista de pares "key": value. Ejemplo: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

routeTotalCost

number

Es el costo total de la ruta. Es la suma de todos los costos en el mapa de costos.

Visitar

Una visita realizada durante una ruta. Esta visita corresponde a un retiro o una entrega de Shipment.

Representación JSON
{
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "detour": string,
  "shipmentLabel": string,
  "visitLabel": string
}
Campos
shipmentIndex

integer

Índice del campo shipments en la fuente ShipmentModel.

isPickup

boolean

Si es verdadero, la visita corresponde al retiro de un Shipment. De lo contrario, corresponde a una publicación.

visitRequestIndex

integer

Índice de VisitRequest en el campo de retiro o entrega de Shipment (consulta isPickup).

startTime

string (Timestamp format)

Hora a la que comienza la visita. Ten en cuenta que el vehículo podría llegar antes que este al lugar de la visita. Los horarios coinciden con el ShipmentModel.

Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: "2014-10-02T15:01:23Z" y "2014-10-02T15:01:23.045123456Z".

loadDemands

map (key: string, value: object (Load))

Demanda de carga de visitas totales como la suma del envío y la solicitud de visita loadDemands. Los valores son negativos si la visita corresponde a una entrega a domicilio. Se informan las demandas para los mismos tipos que Transition.loads (consulta este campo).

Es un objeto que contiene una lista de pares "key": value. Ejemplo: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

detour

string (Duration format)

Tiempo de desvío adicional debido a los envíos visitados en la ruta antes de la visita y al posible tiempo de espera inducido por los períodos. Si la visita corresponde a una entrega a domicilio, el desvío se calcula a partir de la visita de retiro correspondiente y es igual a lo siguiente:

startTime(delivery) - startTime(pickup)
- (duration(pickup) + travel duration from the pickup location
to the delivery location).

De lo contrario, se calcula a partir del startLocation del vehículo y es igual a lo siguiente:

startTime - vehicleStartTime - travel duration from
the vehicle's `startLocation` to the visit.

Una duración en segundos con hasta nueve dígitos decimales, que terminan en “s”. Ejemplo: "3.5s".

shipmentLabel

string

Copia del Shipment.label correspondiente, si se especifica en Shipment.

visitLabel

string

Copia del VisitRequest.label correspondiente, si se especifica en VisitRequest.

Transición

Transición entre dos eventos en la ruta Consulta la descripción de ShipmentRoute.

Si el vehículo no tiene un startLocation o un endLocation, las métricas de viaje correspondientes son 0.

Representación JSON
{
  "travelDuration": string,
  "travelDistanceMeters": number,
  "trafficInfoUnavailable": boolean,
  "delayDuration": string,
  "breakDuration": string,
  "waitDuration": string,
  "totalDuration": string,
  "startTime": string,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "vehicleLoads": {
    string: {
      object (VehicleLoad)
    },
    ...
  }
}
Campos
travelDuration

string (Duration format)

Duración del viaje durante esta transición.

Una duración en segundos con hasta nueve dígitos decimales, que terminan en “s”. Ejemplo: "3.5s".

travelDistanceMeters

number

Distancia recorrida durante la transición.

trafficInfoUnavailable

boolean

Cuando se solicita tráfico a través de OptimizeToursRequest.consider_road_traffic y la información sobre el tráfico no se pudo recuperar para un Transition, este valor booleano se establece como verdadero. Esto puede ser temporal (interrupción poco frecuente en los servidores de tráfico en tiempo real) o permanente (sin datos para esta ubicación).

delayDuration

string (Duration format)

Suma de las duraciones de los retrasos que se aplican a esta transición. Si hubiera alguno, el retraso comienza exactamente delayDuration segundos antes del próximo evento (finalización de la visita o el vehículo). Consulta los TransitionAttributes.delay.

Una duración en segundos con hasta nueve dígitos decimales, que terminan en “s”. Ejemplo: "3.5s".

breakDuration

string (Duration format)

Suma de la duración de las pausas que ocurren durante esta transición, si las hubiera. Los detalles sobre la hora de inicio y la duración de cada pausa se almacenan en ShipmentRoute.breaks.

Una duración en segundos con hasta nueve dígitos decimales, que terminan en “s”. Ejemplo: "3.5s".

waitDuration

string (Duration format)

Tiempo de espera durante esta transición. La duración de espera corresponde al tiempo de inactividad y no incluye el tiempo de pausa. Además, ten en cuenta que este tiempo de espera puede dividirse en varios intervalos no contiguos.

Una duración en segundos con hasta nueve dígitos decimales, que terminan en “s”. Ejemplo: "3.5s".

totalDuration

string (Duration format)

Es la duración total de la transición, proporcionada para mayor comodidad. Es igual a:

  • próxima visita startTime (o vehicleEndTime si esta es la última transición): startTime de esta transición
  • Si ShipmentRoute.has_traffic_infeasibilities es falso, también se aplica lo siguiente: `totalDuration = journeyDuration + retrasados
  • "breakDuration + waitDuration".

Una duración en segundos con hasta nueve dígitos decimales, que terminan en “s”. Ejemplo: "3.5s".

startTime

string (Timestamp format)

Es la hora de inicio de esta transición.

Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: "2014-10-02T15:01:23Z" y "2014-10-02T15:01:23.045123456Z".

routePolyline

object (EncodedPolyline)

Representación de polilínea codificada de la ruta seguida durante la transición. Este campo solo se propaga si se establece populateTransitionPolylines como verdadero.

vehicleLoads

map (key: string, value: object (VehicleLoad))

El vehículo se carga durante esta transición para cada tipo que aparezca en el Vehicle.load_limits de este vehículo o que tenga Shipment.load_demands distintos de cero en algún envío realizado en esta ruta.

Las cargas durante la primera transición son las cargas iniciales de la ruta del vehículo. Luego, después de cada visita, se agregan o se restan los loadDemands de la visita para obtener las cargas de la próxima transición, dependiendo de si la visita fue un retiro o una entrega.

Es un objeto que contiene una lista de pares "key": value. Ejemplo: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

EncodedPolyline

Representación codificada de una polilínea. Para obtener más información sobre la codificación de polilíneas, consulta la siguiente información: https://developers.google.com/maps/documentation/utilities/polylinealgorithm.https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.

Representación JSON
{
  "points": string
}
Campos
points

string

Cadena que representa puntos codificados de la polilínea.

Receso

Datos que representan la ejecución de una pausa

Representación JSON
{
  "startTime": string,
  "duration": string
}
Campos
startTime

string (Timestamp format)

Hora de inicio del receso.

Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: "2014-10-02T15:01:23Z" y "2014-10-02T15:01:23.045123456Z".

duration

string (Duration format)

Duración de la pausa.

Una duración en segundos con hasta nueve dígitos decimales, que terminan en “s”. Ejemplo: "3.5s".