ShipmentRoute

L'itinéraire d'un véhicule peut être décomposé le long de l'axe temporel, comme ceci (nous supposons qu'il y a n visites):

  |            |            |          |       |  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

Notez que nous faisons une différence entre:

  • les "événements ponctuels", tels que le début et la fin du véhicule, ou le début et la fin de chaque visite (c'est-à-dire l'arrivée et le départ). Elles se produisent à une seconde donnée.
  • "intervalles de temps", par exemple, les visites elles-mêmes et la transition entre les visites. Bien que les intervalles de temps puissent parfois avoir une durée nulle (c'est-à-dire qu'ils commencent et se terminent à la même seconde), ils ont souvent une durée positive.

Règles invariantes :

  • S'il y a n visites, il y a n+1 transitions.
  • Une visite est toujours entourée d'une transition avant elle (même index) et d'une transition après (index + 1).
  • Le démarrage du véhicule est toujours suivi de la transition n° 0.
  • L'extrémité du véhicule est toujours précédée de la transition #n.

En zoomant, voici ce qui se passe pendant une Transition et une 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

Enfin, voici comment définir les paramètres VOYAGE, PAUSES, DÉLAI et ATTENTE lors d'une transition.

  • Ils ne se chevauchent pas.
  • Le délai de réponse (DELAY) est unique et doit être une période contiguë avant la prochaine visite (ou la fin du véhicule). Il suffit donc de connaître la durée du retard pour connaître ses heures de début et de fin.
  • Les BREAKS sont des périodes de temps contiguës qui ne se chevauchent pas. La réponse spécifie l'heure de début et la durée de chaque coupure.
  • Les délais de VOYAGE et d'ATTENTE sont "préemptables": ils peuvent être interrompus plusieurs fois au cours de cette transition. Les clients peuvent supposer que le trajet se déroule "dès que possible" et que l'attente occupe le temps restant.

Exemple (complexe) :

                               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     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
Représentation 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
}
Champs
vehicleIndex

integer

Véhicule effectuant l'itinéraire, identifié par son indice dans la source ShipmentModel.

vehicleLabel

string

Étiquette du véhicule effectuant cet itinéraire, égal à ShipmentModel.vehicles(vehicleIndex).label, si spécifié.

vehicleStartTime

string (Timestamp format)

Heure à laquelle le véhicule commence son itinéraire.

Code temporel au format RFC3339 UTC "Zulu", avec une résolution à la nanoseconde et jusqu'à neuf chiffres après la virgule. Exemples: "2014-10-02T15:01:23Z" et "2014-10-02T15:01:23.045123456Z".

vehicleEndTime

string (Timestamp format)

Heure à laquelle le véhicule termine son trajet.

Code temporel au format RFC3339 UTC "Zulu", avec une résolution à la nanoseconde et jusqu'à neuf chiffres après la virgule. Exemples: "2014-10-02T15:01:23Z" et "2014-10-02T15:01:23.045123456Z".

visits[]

object (Visit)

Séquence de visites ordonnée représentant un itinéraire. "Visits[i]" correspond à la i-ième visite de l'itinéraire. Si ce champ est vide, le véhicule est considéré comme non utilisé.

transitions[]

object (Transition)

Liste numérotée des transitions de la route.

hasTrafficInfeasibilities

boolean

Lorsque OptimizeToursRequest.consider_road_traffic est défini sur "true", ce champ indique que les incohérences dans les durées d'itinéraire sont prévues à l'aide d'estimations de durée de trajets basées sur le trafic. Le temps peut être insuffisant pour effectuer des trajets, des retards et des pauses adaptés aux conditions de circulation entre les visites, avant ou après la dernière visite, tout en respectant les horaires de passage et les horaires du véhicule. Par exemple :

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

L'arrivée à "next_visit" aura probablement lieu plus tard que son créneau horaire actuel, en raison de l'estimation accrue du temps de trajet travelDuration(previous_visit, next_visit) en raison de la circulation. En outre, une pause peut être forcée en même temps qu'une visite en raison d'une augmentation de l'estimation du temps de trajet et des restrictions sur les périodes de visite ou de pause.

routePolyline

object (EncodedPolyline)

Représentation de l'itinéraire sous forme de polyligne encodée. Ce champ n'est renseigné que si OptimizeToursRequest.populate_polylines est défini sur "true".

breaks[]

object (Break)

Arrêts planifiés pour le véhicule effectuant cet itinéraire. La séquence breaks représente des intervalles de temps, chacun commençant au startTime correspondant et durera duration secondes.

metrics

object (AggregatedMetrics)

Métriques de durée, de distance et de chargement pour cet itinéraire. Les champs de AggregatedMetrics sont additionnés pour tous les ShipmentRoute.transitions ou ShipmentRoute.visits, en fonction du contexte.

routeCosts

map (key: string, value: number)

Coût de l'itinéraire, ventilé par champs de requête liés au coût. Les clés sont des chemins proto par rapport à la requête OptimizeToursRequest d'entrée (par exemple, "model.shipments.pickups.cost"). Les valeurs correspondent au coût total généré par le champ de coût correspondant, agrégé sur l'ensemble de l'itinéraire. En d'autres termes, la valeur "cost"["model.shipments.pickups.cost"] correspond à la somme de tous les coûts de retrait sur l'itinéraire. Tous les coûts définis dans le modèle sont présentés en détail ici, à l'exception des coûts liés aux TransitionAttributes, qui ne sont indiqués que de manière agrégée en date du 1er janvier 2022.

Objet contenant une liste de paires "key": value. Exemple : { "name": "wrench", "mass": "1.3kg", "count": "3" }.

routeTotalCost

number

Coût total de l'itinéraire. Somme de tous les coûts sur le plan des coûts.

Accéder à la page

Visite effectuée au cours d'un itinéraire. Cette visite correspond à la collecte ou à la livraison d'un Shipment.

Représentation JSON
{
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "detour": string,
  "shipmentLabel": string,
  "visitLabel": string
}
Champs
shipmentIndex

integer

Index du champ shipments dans la source ShipmentModel

isPickup

boolean

Si la valeur est "true", la visite correspond à une prise en charge d'un Shipment. Dans le cas contraire, il correspond à une diffusion.

visitRequestIndex

integer

Index de VisitRequest dans le champ de retrait ou de livraison de Shipment (voir isPickup).

startTime

string (Timestamp format)

Heure à laquelle la visite commence. Notez que le véhicule peut arriver plus tôt au lieu de la visite. Les heures correspondent aux ShipmentModel.

Code temporel au format RFC3339 UTC "Zulu", avec une résolution à la nanoseconde et jusqu'à neuf chiffres après la virgule. Exemples: "2014-10-02T15:01:23Z" et "2014-10-02T15:01:23.045123456Z".

loadDemands

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

Demande totale de chargement de visites, calculée en additionnant les valeurs de la livraison et des demandes de visite loadDemands. Les valeurs sont négatives si la visite correspond à une livraison. Les demandes sont enregistrées pour les mêmes types que Transition.loads (voir ce champ).

Objet contenant une liste de paires "key": value. Exemple : { "name": "wrench", "mass": "1.3kg", "count": "3" }.

detour

string (Duration format)

Délai de déviation supplémentaire en raison des expéditions visitées sur l'itinéraire avant la visite et du temps d'attente potentiel induits par les créneaux horaires. S'il s'agit d'une livraison, le détour est calculé à partir de la visite de retrait correspondante et est égal à:

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

Sinon, elle est calculée à partir du startLocation du véhicule et est égale à:

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

Durée en secondes avec un maximum de neuf chiffres après la virgule, se terminant par "s". Exemple: "3.5s".

shipmentLabel

string

Copie du Shipment.label correspondant, si spécifié dans Shipment.

visitLabel

string

Copie du VisitRequest.label correspondant, si spécifié dans VisitRequest.

Transition

Transition entre deux événements sur la route Consultez la description de ShipmentRoute.

Si le véhicule n'a pas de startLocation et/ou de endLocation, les métriques de trajet correspondantes sont de 0.

Représentation JSON
{
  "travelDuration": string,
  "travelDistanceMeters": number,
  "trafficInfoUnavailable": boolean,
  "delayDuration": string,
  "breakDuration": string,
  "waitDuration": string,
  "totalDuration": string,
  "startTime": string,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "vehicleLoads": {
    string: {
      object (VehicleLoad)
    },
    ...
  }
}
Champs
travelDuration

string (Duration format)

Durée du trajet pendant cette transition.

Durée en secondes avec un maximum de neuf chiffres après la virgule, se terminant par "s". Exemple: "3.5s".

travelDistanceMeters

number

Distance parcourue pendant la transition.

trafficInfoUnavailable

boolean

Lorsque le trafic est demandé via OptimizeToursRequest.consider_road_traffic et que les informations sur le trafic n'ont pas pu être récupérées pour un Transition, cette valeur booléenne est définie sur "true". Il peut s'agir d'un problème temporaire (rare problème sur les serveurs de trafic en temps réel) ou permanent (aucune donnée n'est disponible pour cet emplacement).

delayDuration

string (Duration format)

Somme des durées de retard appliquées à cette transition. Le cas échéant, le retard commence exactement delayDuration secondes avant le prochain événement (visite ou arrivée du véhicule). Consultez les TransitionAttributes.delay.

Durée en secondes avec un maximum de neuf chiffres après la virgule, se terminant par "s". Exemple: "3.5s".

breakDuration

string (Duration format)

Somme des durées des coupures publicitaires survenant au cours de cette transition, le cas échéant. Les informations sur l'heure de début et la durée de chaque coupure sont stockées dans ShipmentRoute.breaks.

Durée en secondes avec un maximum de neuf chiffres après la virgule, se terminant par "s". Exemple: "3.5s".

waitDuration

string (Duration format)

Temps d'attente au cours de cette transition. La durée d'attente correspond au temps d'inactivité et n'inclut pas le temps de pause. Notez également que ce temps d'attente peut être divisé en plusieurs intervalles non contigus.

Durée en secondes avec un maximum de neuf chiffres après la virgule, se terminant par "s". Exemple: "3.5s".

totalDuration

string (Duration format)

Durée totale de la transition, fournie à titre indicatif. Elle est égale à:

  • prochaine visite sur startTime (ou vehicleEndTime s'il s'agit de la dernière transition) – startTime de cette transition ;
  • Si ShipmentRoute.has_traffic_infeasibilities est défini sur "false", ce qui suit est également valable: `totalDuration = TravelDuration + delayDuration
  • stopDuration + waitDuration`.

Durée en secondes avec un maximum de neuf chiffres après la virgule, se terminant par "s". Exemple: "3.5s".

startTime

string (Timestamp format)

Heure de début de cette transition.

Code temporel au format RFC3339 UTC "Zulu", avec une résolution à la nanoseconde et jusqu'à neuf chiffres après la virgule. Exemples: "2014-10-02T15:01:23Z" et "2014-10-02T15:01:23.045123456Z".

routePolyline

object (EncodedPolyline)

Représentation en polyligne encodée de l'itinéraire suivi pendant la transition. Ce champ n'est renseigné que si populateTransitionPolylines est défini sur "true".

vehicleLoads

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

Chargements de véhicules pendant cette transition, pour chaque type qui apparaît dans le Vehicle.load_limits de ce véhicule ou dont la valeur de Shipment.load_demands n'est pas nulle pour une livraison effectuée sur cet itinéraire.

Les charges de la première transition correspondent aux charges de départ de l'itinéraire du véhicule. Ensuite, après chaque visite, les loadDemands de la visite sont ajoutés ou soustraits pour obtenir les chargements de la transition suivante, selon qu'il s'agissait d'un retrait ou d'une livraison.

Objet contenant une liste de paires "key": value. Exemple : { "name": "wrench", "mass": "1.3kg", "count": "3" }.

EncodedPolyline

Représentation encodée d'une polyligne. Pour en savoir plus sur l'encodage des polylignes, consultez la page https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.

Représentation JSON
{
  "points": string
}
Champs
points

string

Chaîne représentant les points encodés de la polyligne.

Pause

Données représentant l'exécution d'une pause.

Représentation JSON
{
  "startTime": string,
  "duration": string
}
Champs
startTime

string (Timestamp format)

Heure de début d'une pause.

Code temporel au format RFC3339 UTC "Zulu", avec une résolution à la nanoseconde et jusqu'à neuf chiffres après la virgule. Exemples: "2014-10-02T15:01:23Z" et "2014-10-02T15:01:23.045123456Z".

duration

string (Duration format)

Durée d'une pause.

Durée en secondes avec un maximum de neuf chiffres après la virgule, se terminant par "s". Exemple: "3.5s".