ShipmentModel

Un modèle de livraison contient un ensemble d'expéditions qui doivent être effectuées par un ensemble de véhicules, tout en minimisant le coût global, qui correspond à la somme des éléments suivants:

  • le coût du calcul d'itinéraire des véhicules (somme des coûts par temps total, coût par temps de trajet et coût fixe pour tous les véhicules) ;
  • les pénalités de livraison non effectuées.
  • le coût de la durée globale des expéditions ;
Représentation JSON
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
Champs
shipments[]

object (Shipment)

Ensemble des livraisons qui doivent être effectuées dans le modèle.

vehicles[]

object (Vehicle)

Ensemble de véhicules pouvant être utilisés pour effectuer des visites.

globalStartTime

string (Timestamp format)

Heures de début et de fin globales du modèle: aucune heure en dehors de cette plage ne peut être considérée comme valide.

La période du modèle doit être inférieure à un an, c'est-à-dire que l'intervalle entre les éléments globalEndTime et globalStartTime doit être inférieur ou égal à 3 153 600 secondes.

Si vous utilisez des champs cost_per_*hour, vous pouvez définir un intervalle plus court pour améliorer les performances (par exemple, si vous modélisez un seul jour, définissez les limites de temps globales sur ce jour-là). Si cette règle n'est pas configurée, la valeur par défaut est 00:00:00 UTC, 1er janvier 1970 (secondes: 0, nanos: 0).

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

globalEndTime

string (Timestamp format)

Si cette règle n'est pas configurée, la valeur par défaut est 00:00:00 UTC, le 1er janvier 1971 (secondes: 31536000, nanos: 0).

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

globalDurationCostPerHour

number

La "durée globale" du forfait global correspond à la différence entre la date de début effective la plus proche et l'heure de fin effective la plus proche pour tous les véhicules. Les utilisateurs peuvent attribuer un coût par heure à cette quantité pour essayer d'optimiser la tâche le plus tôt possible, par exemple. Ce coût doit être exprimé dans la même unité que le montant en Shipment.penalty_cost.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

Spécifie les matrices de durée et de distance utilisées dans le modèle. Si ce champ est vide, Google Maps ou les distances géodésiques sont utilisés à la place, en fonction de la valeur du champ useGeodesicDistances. Si ce champ n'est pas vide, useGeodesicDistances ne peut pas être "true", et ni durationDistanceMatrixSrcTags, ni durationDistanceMatrixDstTags ne peuvent être vides.

Exemples d'utilisation :

  • Deux emplacements sont disponibles: locA et locB.
  • 1 véhicule qui commence son itinéraire à l'emplacement A et l'arrête à l'emplacement A.
  • 1 demande de prise en charge à l'emplacement B
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • Trois emplacements sont disponibles: locA, locB et locC.
  • 1 véhicule qui commence son itinéraire à la position A et finit à la position B en utilisant la matrice "rapide".
  • 1 véhicule qui commence son itinéraire à la borne B et qui arrive à la position B en utilisant la matrice "lente".
  • 1 véhicule qui commence son itinéraire à la borne B et qui arrive à la position B en utilisant la matrice "rapide".
  • 1 demande de retrait en magasin à locC.
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

Balises définissant les sources des matrices de durée et de distance ; durationDistanceMatrices(i).rows(j) définit les durées et les distances entre les visites avec la balise durationDistanceMatrixSrcTags(j) et les autres visites dans la matrice i.

Les balises correspondent à VisitRequest.tags ou Vehicle.start_tags. Un élément VisitRequest ou Vehicle donné doit correspondre exactement à un tag dans ce champ. Notez que les balises source, de destination et matricielle d'un Vehicle peuvent être identiques. De même, les balises de source et de destination d'un VisitRequest peuvent être identiques. Toutes les balises doivent être différentes et ne peuvent pas être des chaînes vides. Si ce champ n'est pas vide, durationDistanceMatrices ne doit pas être vide.

durationDistanceMatrixDstTags[]

string

Balises définissant les destinations des matrices de durée et de distance ; durationDistanceMatrices(i).rows(j).durations(k) (resp. durationDistanceMatrices(i).rows(j).meters(k)) définit la durée (en fonction de la distance) du trajet entre les visites avec la balise durationDistanceMatrixSrcTags(j) et les visites avec la balise durationDistanceMatrixDstTags(k) dans la matrice i.

Les balises correspondent à VisitRequest.tags ou Vehicle.start_tags. Un élément VisitRequest ou Vehicle donné doit correspondre exactement à un tag dans ce champ. Notez que les balises source, de destination et matricielle d'un Vehicle peuvent être identiques. De même, les balises de source et de destination d'un VisitRequest peuvent être identiques. Toutes les balises doivent être différentes et ne peuvent pas être des chaînes vides. Si ce champ n'est pas vide, durationDistanceMatrices ne doit pas être vide.

transitionAttributes[]

object (TransitionAttributes)

Attributs de transition ajoutés au modèle.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

Ensembles de types de livraison non compatibles (voir ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

Ensembles d'exigences pour shipmentType (voir ShipmentTypeRequirement).

precedenceRules[]

object (PrecedenceRule)

Ensemble de règles de priorité à appliquer dans le modèle.

maxActiveVehicles

integer

Limite le nombre maximal de véhicules actifs. Un véhicule est actif si son itinéraire effectue au moins une expédition. Cela permet de limiter le nombre d'itinéraires dans le cas où il y a moins de conducteurs que de véhicules et que le parc de véhicules est hétérogène. L'optimisation sélectionne ensuite le meilleur sous-ensemble de véhicules à utiliser. La valeur doit être strictement positive.

Livraison

L'expédition d'un seul article, d'un de ses retraits à l'une de ses livraisons. Pour que la livraison soit considérée comme effectuée, un véhicule unique doit se rendre dans l'un de ses points de retrait (et réduire ses capacités de réserve en conséquence), puis se rendre ultérieurement dans l'un de ses points de livraison (et donc augmenter à nouveau ses capacités de réserve en conséquence).

Représentation JSON
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
Champs
displayName

string

Nom à afficher défini par l'utilisateur pour le colis. Il peut comporter jusqu'à 63 caractères et utiliser des caractères UTF-8.

pickups[]

object (VisitRequest)

Ensemble des alternatives de retrait associées à la livraison. S'il n'est pas spécifié, le véhicule ne doit se rendre qu'à un lieu correspondant aux livraisons.

deliveries[]

object (VisitRequest)

Ensemble des alternatives de livraison associées à l'expédition. S'il n'est pas spécifié, il suffit que le véhicule se rende dans un lieu correspondant aux prises en charge.

loadDemands

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

Charges requises pour le colis (par exemple, le poids, le volume, le nombre de palettes, etc.) Les clés du mappage doivent être des identifiants décrivant le type de charge correspondante, idéalement en incluant les unités. Par exemple: "weight_kg", "volume_gallons", "pallet_count", etc. Si une clé donnée n'apparaît pas sur la carte, la charge correspondante est considérée comme nulle.

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

allowedVehicleIndices[]

integer

Ensemble des véhicules pouvant effectuer cette expédition. Si ce champ est vide, tous les véhicules peuvent l'utiliser. Les véhicules sont indiqués par leur indice dans la liste vehicles de ShipmentModel.

costsPerVehicle[]

number

Indique les frais à payer lorsque cette livraison est effectuée par chaque véhicule. S'il est spécifié, il doit contenir SOIT:

  • le même nombre d'éléments que costsPerVehicleIndices. costsPerVehicle[i] correspond au véhicule costsPerVehicleIndices[i] du modèle.
  • le même nombre d'éléments qu'il y a de véhicules dans le modèle. Le i-ième élément correspond au numéro i du véhicule du modèle.

Ces coûts doivent être exprimés dans la même unité que le penaltyCost et ne doivent pas être négatifs. Laissez ce champ vide s'il n'y a pas de coûts de ce type.

costsPerVehicleIndices[]

integer

Intervalles des véhicules auxquels s'applique costsPerVehicle. S'il n'est pas vide, il doit comporter le même nombre d'éléments que costsPerVehicle. Vous ne pouvez pas spécifier plusieurs fois l'index d'un véhicule. Si un véhicule est exclu de costsPerVehicleIndices, son coût est de zéro.

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

Spécifie le délai absolu maximal de déviation par rapport au chemin le plus court entre le retrait et la livraison. Si cet attribut est spécifié, il ne doit pas être négatif, et le colis doit inclure au moins les options de retrait et de livraison.

Par exemple, indiquez le délai le plus court pour passer directement de l'alternative de retrait choisie directement à l'alternative de livraison choisie. Ensuite, la définition de pickupToDeliveryAbsoluteDetourLimit applique ce qui suit:

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

Si des limites relatives et absolues sont spécifiées pour une même livraison, la limite la plus contraignante est utilisée pour chaque paire de retrait/livraison possible. Depuis 2017/2010, les déviations ne sont autorisées que lorsque la durée du trajet ne dépend pas des véhicules.

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

pickupToDeliveryTimeLimit

string (Duration format)

Spécifie la durée maximale entre le début du retrait et le début de la livraison d'une livraison. Si cet attribut est spécifié, il ne doit pas être négatif, et le colis doit inclure au moins les options de retrait et de livraison. Cela ne dépend pas des alternatives sélectionnées pour la collecte et la livraison, ni de la vitesse du véhicule. Cette valeur peut être spécifiée en même temps que les contraintes de déviation maximales: la solution respectera ces deux spécifications.

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

shipmentType

string

Chaîne non vide indiquant un "type" pour cette livraison. Cette fonctionnalité permet de définir des incompatibilités ou des exigences entre shipment_types (voir shipmentTypeIncompatibilities et shipmentTypeRequirements dans ShipmentModel).

Différent de visitTypes, qui est spécifié pour une seule visite: tous les retraits et livraisons associés à une même livraison partagent le même shipmentType.

label

string

Spécifie une étiquette pour cette livraison. Ce libellé est signalé dans la réponse dans l'élément shipmentLabel du ShipmentRoute.Visit correspondant.

ignore

boolean

Si la valeur est "true", ignorez cette livraison, mais n'appliquez pas de penaltyCost.

Le fait d'ignorer une livraison entraîne une erreur de validation lorsque le modèle contient des shipmentTypeRequirements.

Vous pouvez ignorer une expédition effectuée dans les pays suivants : injectedFirstSolutionRoutes ou injectedSolutionConstraint. L'outil de résolution supprime les visites associées (retrait/livraison) de l'itinéraire qui effectue les livraisons. Les precedenceRules qui font référence à des livraisons ignorées seront également ignorées.

penaltyCost

number

Si l'expédition n'est pas effectuée, cette pénalité est ajoutée au coût global des itinéraires. Une expédition est considérée comme terminée si l'une de ses alternatives de retrait et de livraison est utilisée. Le coût peut être exprimé dans la même unité que celle utilisée pour tous les autres champs du modèle relatifs au coût. La valeur doit être positive.

IMPORTANT: Si cette pénalité n'est pas spécifiée, elle est considérée comme illimitée, ce qui signifie que l'envoi doit être effectué.

pickupToDeliveryRelativeDetourLimit

number

Spécifie le délai de détour maximal relatif par rapport au trajet le plus court entre le retrait et la livraison. Si cet attribut est spécifié, il ne doit pas être négatif, et le colis doit inclure au moins les options de retrait et de livraison.

Par exemple, indiquez le délai le plus court pour passer directement de l'alternative de retrait choisie directement à l'alternative de livraison choisie. Ensuite, la définition de pickupToDeliveryRelativeDetourLimit applique ce qui suit:

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

Si des limites relatives et absolues sont spécifiées pour une même livraison, la limite la plus contraignante est utilisée pour chaque paire de retrait/livraison possible. Depuis 2017/2010, les déviations ne sont autorisées que lorsque la durée du trajet ne dépend pas des véhicules.

VisitRequest

Demande d'une visite pouvant être effectuée par un véhicule: un véhicule dispose d'une zone géographique (ou deux comme ci-dessous), d'heures d'ouverture et de fermeture représentées par des créneaux horaires, et d'une durée du service (temps passé par le véhicule une fois qu'il est arrivé pour récupérer ou déposer les marchandises).

Représentation JSON
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string
}
Champs
arrivalLocation

object (LatLng)

La géolocalisation à laquelle le véhicule arrive lorsque vous effectuez cette opération VisitRequest. Si le modèle de livraison comporte des matrices de durée et de distance, arrivalLocation ne doit pas être spécifié.

arrivalWaypoint

object (Waypoint)

Point de cheminement où le véhicule arrive lorsque vous effectuez cette VisitRequest. Si le modèle de livraison comporte des matrices de durée et de distance, arrivalWaypoint ne doit pas être spécifié.

departureLocation

object (LatLng)

Il s'agit de la zone géographique à partir de laquelle le véhicule décolle une fois ce champ VisitRequest terminé. Peut être omis s'il est identique à arrivalLocation. Si le modèle de livraison comporte des matrices de durée et de distance, departureLocation ne doit pas être spécifié.

departureWaypoint

object (Waypoint)

Point de cheminement où part le véhicule une fois ce point VisitRequest terminé. Peut être omis s'il est identique à arrivalWaypoint. Si le modèle de livraison comporte des matrices de durée et de distance, departureWaypoint ne doit pas être spécifié.

tags[]

string

Spécifie les tags associés à la demande de visite. Les chaînes vides ou en double ne sont pas autorisées.

timeWindows[]

object (TimeWindow)

Périodes qui limitent l'heure d'arrivée à une visite. Notez qu'un véhicule peut partir en dehors de l'heure d'arrivée. Par exemple, il n'est pas nécessaire que l'heure d'arrivée + la durée soient dans une fenêtre horaire. Cela peut entraîner un temps d'attente si le véhicule arrive avant TimeWindow.start_time.

L'absence de TimeWindow signifie que le véhicule peut effectuer cette visite à tout moment.

Les fenêtres temporelles doivent être disjointes, c'est-à-dire qu'aucune période ne doit se chevaucher ou être adjacente à une autre, et les présenter dans un ordre croissant.

costPerHourAfterSoftEndTime et softEndTime ne peuvent être définis que s'il existe une seule période.

duration

string (Duration format)

Durée de la visite, c'est-à-dire le temps passé par le véhicule entre l'arrivée et le départ (à ajouter au temps d'attente possible ; voir timeWindows).

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

cost

number

Coût de traitement de cette demande de visite sur l'itinéraire d'un véhicule. Cela peut être utilisé pour payer des coûts différents pour chaque retrait ou livraison d'un colis. Ce coût doit être exprimé dans la même unité que le Shipment.penalty_cost et ne doit pas être négatif.

loadDemands

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

Charger les demandes de cette demande de visite. Ce champ est identique à Shipment.load_demands, sauf qu'il ne s'applique qu'à ce VisitRequest et non à l'ensemble du Shipment. Les demandes listées ici sont ajoutées à celles listées dans Shipment.load_demands.

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

visitTypes[]

string

Indique les types de visite. Cela peut être utilisé pour allouer le temps supplémentaire nécessaire à un véhicule pour effectuer cette visite (voir Vehicle.extra_visit_duration_for_visit_type).

Un type ne peut apparaître qu'une seule fois.

label

string

Spécifie un libellé pour cet élément VisitRequest. Ce libellé est signalé dans la réponse comme visitLabel dans le ShipmentRoute.Visit correspondant.

LatLng

Objet représentant une paire latitude/longitude. Cette valeur est exprimée par une paire de doubles représentant les degrés de latitude et de longitude. Sauf indication contraire, cet objet doit être conforme à la norme WGS84. Les valeurs doivent se situer dans les limites normalisées.

Représentation JSON
{
  "latitude": number,
  "longitude": number
}
Champs
latitude

number

Latitude en degrés. Elle doit être comprise dans la plage [-90.0, +90.0].

longitude

number

Longitude en degrés. Elle doit être comprise dans la plage [-180.0, +180.0].

Repère

Encapsule un point de cheminement. Les points de cheminement indiquent les lieux d'arrivée et de départ des VisitRequests, ainsi que les lieux de départ et d'arrivée des véhicules.

Représentation JSON
{
  "sideOfRoad": boolean,

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
Champs
sideOfRoad

boolean

Facultatif. Indique que l'emplacement de ce point de cheminement doit permettre au véhicule de s'arrêter d'un côté de la route de préférence. Lorsque vous définissez cette valeur, l'itinéraire passe par ce lieu afin que le véhicule puisse s'arrêter au bord de la route où l'emplacement est orienté vers le centre. Cette option ne fonctionne pas pour le mode de transport "WALKING".

Champ d'union location_type. Différentes manières de représenter un lieu. location_type ne peut être qu'un des éléments suivants :
location

object (Location)

Point spécifié à l'aide de coordonnées géographiques, y compris un cap facultatif.

placeId

string

ID de lieu du POI associé au point de cheminement.

Emplacement

Encapsule un emplacement (un point géographique et un titre facultatif).

Représentation JSON
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
Champs
latLng

object (LatLng)

Coordonnées géographiques du point de cheminement

heading

integer

Cap de la boussole associé au sens de la circulation. Cette valeur permet d'indiquer le côté de la route à utiliser pour les montées et les descentes. Les valeurs de cap peuvent aller de 0 à 360, où 0 indique un sens vers le nord, 90 indique un cap suivant l'orientation vers l'est, etc.

TimeWindow

Les fenêtres temporelles limitent l'heure d'un événement, comme l'heure d'arrivée d'une visite, ou les heures de début et d'arrivée d'un véhicule.

Les limites de fenêtre temporelle (startTime et endTime) appliquent les dates au plus tôt et au plus tard de l'événement, de sorte que startTime <= event_time <= endTime. La limite inférieure de la fenêtre temporelle flexible, softStartTime, exprime une préférence pour que l'événement se produise à softStartTime ou après en générant un coût proportionnel à la durée qui précède l'événement softStartTime. La limite supérieure de la fenêtre temporelle flexible, softEndTime, exprime une préférence pour que l'événement se produise au softEndTime ou avant en générant un coût proportionnel à la durée après softEndTime où l'événement se produit. startTime, endTime, softStartTime et softEndTime doivent se situer dans les limites de temps globales (voir ShipmentModel.global_start_time et ShipmentModel.global_end_time) et doivent respecter:

  0 <= `startTime` <= `softStartTime` <= `endTime` and
  0 <= `startTime` <= `softEndTime` <= `endTime`.
Représentation JSON
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
Champs
startTime

string (Timestamp format)

Heure de début de la fenêtre de temps difficile. Si aucune valeur n'est spécifiée, elle sera définie sur ShipmentModel.global_start_time.

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

endTime

string (Timestamp format)

Heure de fin de la fenêtre de temps difficile. Si aucune valeur n'est spécifiée, elle sera définie sur ShipmentModel.global_end_time.

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

softStartTime

string (Timestamp format)

Heure de démarrage soft de la fenêtre temporelle.

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

softEndTime

string (Timestamp format)

Heure de fin douce de la fenêtre temporelle.

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

costPerHourBeforeSoftStartTime

number

Coût par heure ajouté aux autres coûts du modèle si l'événement se produit avant softStartTime, calculé comme suit:

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

Ce coût doit être positif, et le champ ne peut être défini que si softStartTime a été défini.

costPerHourAfterSoftEndTime

number

Coût par heure ajouté aux autres coûts du modèle si l'événement se produit après le softEndTime, calculé comme suit:

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

Ce coût doit être positif, et le champ ne peut être défini que si softEndTime a été défini.

Véhicule

modélise un véhicule lors d'un problème d'expédition ; Si vous résolvez un problème de livraison, un itinéraire commençant par startLocation et se terminant à endLocation sera créé pour ce véhicule. Un itinéraire est une séquence de visites (voir ShipmentRoute).

Représentation JSON
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
Champs
displayName

string

Nom à afficher du véhicule défini par l'utilisateur. Il peut comporter jusqu'à 63 caractères et utiliser des caractères UTF-8.

travelMode

enum (TravelMode)

Mode de transport qui affecte les routes utilisables par le véhicule et sa vitesse. Voir aussi travelDurationMultiple.

startLocation

object (LatLng)

Emplacement géographique où le véhicule commence avant de récupérer les colis. Si aucune valeur n'est spécifiée, le véhicule commence à sa première prise en charge. Si le modèle de livraison comporte des matrices de durée et de distance, startLocation ne doit pas être spécifié.

startWaypoint

object (Waypoint)

Point de cheminement représentant l'emplacement géographique où le véhicule commence avant de récupérer les colis. Si aucune valeur n'est spécifiée pour startWaypoint ni startLocation, le véhicule commence à sa première prise en charge. Si le modèle de livraison comporte des matrices de durée et de distance, startWaypoint ne doit pas être spécifié.

endLocation

object (LatLng)

Emplacement géographique où le véhicule se termine après la fin de sa dernière période de VisitRequest. Si aucune valeur n'est spécifiée, l'attribut ShipmentRoute du véhicule se termine immédiatement lorsqu'il a terminé son dernier VisitRequest. Si le modèle de livraison comporte des matrices de durée et de distance, endLocation ne doit pas être spécifié.

endWaypoint

object (Waypoint)

Point de cheminement représentant l'emplacement géographique où le véhicule s'arrête après avoir terminé son dernier VisitRequest. Si ni endWaypoint, ni endLocation n'est spécifié, le ShipmentRoute du véhicule se termine immédiatement lorsqu'il termine sa dernière VisitRequest. Si le modèle de livraison comporte des matrices de durée et de distance, endWaypoint ne doit pas être spécifié.

startTags[]

string

Spécifie les tags associés au début de l'itinéraire du véhicule.

Les chaînes vides ou en double ne sont pas autorisées.

endTags[]

string

Spécifie les tags ajoutés à la fin de l'itinéraire du véhicule.

Les chaînes vides ou en double ne sont pas autorisées.

startTimeWindows[]

object (TimeWindow)

Périodes pendant lesquelles le véhicule peut partir de son lieu de départ. Ils doivent respecter les limites de temps globales (voir les champs ShipmentModel.global_*). S'il n'est pas spécifié, il n'existe aucune limite en dehors de ces limites de temps globales.

Les fenêtres temporelles appartenant au même champ répété doivent être disjointes. Autrement dit, aucune période ne peut se chevaucher ou être adjacente à une autre, et les présenter dans l'ordre chronologique.

costPerHourAfterSoftEndTime et softEndTime ne peuvent être définis que s'il existe une seule période.

endTimeWindows[]

object (TimeWindow)

Périodes pendant lesquelles le véhicule peut arriver à son point d'arrivée. Ils doivent respecter les limites de temps globales (voir les champs ShipmentModel.global_*). S'il n'est pas spécifié, il n'existe aucune limite en dehors de ces limites de temps globales.

Les fenêtres temporelles appartenant au même champ répété doivent être disjointes. Autrement dit, aucune période ne peut se chevaucher ou être adjacente à une autre, et les présenter dans l'ordre chronologique.

costPerHourAfterSoftEndTime et softEndTime ne peuvent être définis que s'il existe une seule période.

unloadingPolicy

enum (UnloadingPolicy)

Règle de déchargement appliquée au véhicule.

loadLimits

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

Capacités du véhicule (poids, volume, nombre de palettes, par exemple). Les clés du mappage sont les identifiants du type de chargement, conformément aux clés du champ Shipment.load_demands. Si une clé donnée est absente de ce mappage, la capacité correspondante est considérée comme illimitée.

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

costPerHour

number

Coûts du véhicule: tous les coûts s'additionnent et doivent être exprimés dans la même unité que le Shipment.penalty_cost.

Coût à l'heure de l'itinéraire du véhicule. Ce coût s'applique à la durée totale de l'itinéraire. Il comprend le temps de trajet, le temps d'attente et le temps de visite. Utiliser costPerHour au lieu de costPerTraveledHour uniquement peut entraîner une latence supplémentaire.

costPerTraveledHour

number

Coût par heure parcourue de l'itinéraire du véhicule. Ce coût n'est appliqué qu'au temps de trajet de l'itinéraire (tel qu'indiqué dans ShipmentRoute.transitions). Les temps d'attente et les visites ne sont pas pris en compte.

costPerKilometer

number

Coût au kilomètre du trajet du véhicule Ce coût est appliqué à la distance indiquée dans le ShipmentRoute.transitions et ne s'applique pas à toute distance implicitement parcourue entre le arrivalLocation et le departureLocation d'un seul VisitRequest.

fixedCost

number

Frais fixes appliqués si ce véhicule est utilisé pour le traitement d'un colis.

usedIfRouteIsEmpty

boolean

Ce champ ne s'applique qu'aux véhicules lorsque leur itinéraire ne dessert aucun envoi. Il indique si le véhicule doit être considéré comme d'occasion ou non.

Si la valeur est "true", le véhicule va de son point de départ à sa destination même s'il ne propose aucune livraison. Les coûts liés au temps et à la distance résultant de son trajet de départ --> d'arrivée sont pris en compte.

Sinon, il ne se déplacera pas de son point de départ à sa position d'arrivée, et aucun breakRule ni retard (à partir de TransitionAttributes) n'est programmé pour ce véhicule. Dans ce cas, le ShipmentRoute du véhicule ne contient aucune information, à l'exception de l'index et de l'étiquette du véhicule.

routeDurationLimit

object (DurationLimit)

Limite appliquée à la durée totale de l'itinéraire du véhicule. Dans une OptimizeToursResponse donnée, la durée de l'itinéraire d'un véhicule correspond à la différence entre ses valeurs vehicleEndTime et vehicleStartTime.

travelDurationLimit

object (DurationLimit)

Limite appliquée à la durée du trajet du véhicule. Dans une OptimizeToursResponse donnée, la durée du trajet de l'itinéraire correspond à la somme de tous ses transitions.travel_duration.

routeDistanceLimit

object (DistanceLimit)

Limite appliquée à la distance totale de l'itinéraire du véhicule. Dans un OptimizeToursResponse donné, la distance de l'itinéraire est la somme de tous ses transitions.travel_distance_meters.

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

Spécifie un mappage entre les chaînes visitTypes et les durées. Il s'agit du temps, en plus des VisitRequest.duration, à effectuer lors des visites avec le visitTypes spécifié. Cette durée supplémentaire entraîne des frais si costPerHour est spécifié. Les clés (c'est-à-dire visitTypes) ne peuvent pas être des chaînes vides.

Si une demande de visite comporte plusieurs types, une durée sera ajoutée pour chacun d'eux sur la carte.

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

breakRule

object (BreakRule)

Décrit les horaires de pause à appliquer sur ce véhicule. Si ce champ est vide, aucune pause ne sera programmée pour ce véhicule.

label

string

Spécifie une étiquette pour ce véhicule. Ce libellé est signalé dans la réponse en tant que vehicleLabel du ShipmentRoute correspondant.

ignore

boolean

Si la valeur est "true", usedIfRouteIsEmpty doit être "false", et ce véhicule ne sera pas utilisé.

Si une expédition est effectuée par un véhicule ignoré dans injectedFirstSolutionRoutes, elle est ignorée dans la première solution, mais elle peut être effectuée dans la réponse.

Si une expédition est effectuée par un véhicule ignoré dans injectedSolutionConstraint, et que tout retrait/livraison associé doit rester sur le véhicule (c'est-à-dire, ne pas être assoupli au niveau RELAX_ALL_AFTER_THRESHOLD), elle est ignorée dans la réponse. Si une livraison comporte un champ allowedVehicleIndices non vide et que tous les véhicules autorisés sont ignorés, elle est ignorée dans la réponse.

travelDurationMultiple

number

Spécifie un facteur multiplicatif pouvant être utilisé pour augmenter ou réduire les temps de trajet du véhicule. Par exemple, si la valeur est définie sur 2,0, ce véhicule est plus lent et son temps de trajet est deux fois supérieur à celui des véhicules standards. Ce multiple n'a pas d'incidence sur la durée des visites. Cela a une incidence sur le coût si costPerHour ou costPerTraveledHour sont spécifiés. Elle doit être comprise dans la plage [0,001, 1000,0]. Si cette règle n'est pas configurée, le véhicule est standard, et ce multiple est considéré comme 1.0.

AVERTISSEMENT: Les temps de trajet sont arrondis à la seconde la plus proche après l'application de ce multiple, mais avant d'effectuer des opérations numériques. Par conséquent, un petit multiple peut entraîner une perte de précision.

Voir aussi extraVisitDurationForVisitType ci-dessous.

TravelMode

Modes de transport pouvant être utilisés par les véhicules.

Il doit s'agir d'un sous-ensemble des modes de transport privilégiés de l'API Routes de Google Maps Platform (voir https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode).

Enums
TRAVEL_MODE_UNSPECIFIED Mode de transport non spécifié, équivalent à DRIVING.
DRIVING Mode de transport correspondant à l'itinéraire en voiture (voiture, ...).
WALKING Mode de transport correspondant à l'itinéraire à pied

UnloadingPolicy

Règle sur le déchargement d'un véhicule. S'applique uniquement aux envois avec retrait et livraison.

Les autres livraisons sont sans frais n'importe où sur l'itinéraire, indépendamment de unloadingPolicy.

Enums
UNLOADING_POLICY_UNSPECIFIED Modalités de déchargement non spécifiées ; les livraisons doivent avoir lieu après le retrait correspondant.
LAST_IN_FIRST_OUT Les livraisons doivent avoir lieu dans l'ordre inverse des retraits
FIRST_IN_FIRST_OUT Les livraisons doivent avoir lieu dans la même commande que les retraits

LoadLimit

Définit une limite de charge applicable à un véhicule (par exemple, "ce camion ne peut pas supporter plus de 3 500 kg"). Consultez les loadLimits.

Représentation JSON
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string
}
Champs
softMaxLoad

string (int64 format)

Limite souple de la charge. Consultez les costPerUnitAboveSoftMax.

costPerUnitAboveSoftMax

number

Si le chargement dépasse softMaxLoad sur l'itinéraire du véhicule, la pénalité suivante s'applique (une seule fois par véhicule): (charge - softMaxLoad) x costPerUnitAboveSoftMax. Tous les coûts s'additionnent et doivent être exprimés dans la même unité que le Shipment.penalty_cost.

startLoadInterval

object (Interval)

Intervalle de chargement acceptable du véhicule au début de l'itinéraire.

endLoadInterval

object (Interval)

Intervalle de chargement acceptable du véhicule en fin d'itinéraire.

maxLoad

string (int64 format)

Quantité de charge maximale acceptable.

Intervalle

Intervalle des quantités de chargement acceptables.

Représentation JSON
{
  "min": string,
  "max": string
}
Champs
min

string (int64 format)

Une charge minimale acceptable. Doit être ≥ 0. Si elles sont toutes les deux spécifiées, min doit être ≤ max.

max

string (int64 format)

Charge maximale acceptable. Doit être ≥ 0. Si aucune valeur n'est spécifiée, la charge maximale n'est pas limitée par ce message. Si elles sont toutes les deux spécifiées, min doit être ≤ max.

DurationLimit

Limite définissant la durée maximale de l'itinéraire d'un véhicule. Il peut être difficile ou doux.

Lorsqu'un champ de limite flexible est défini, le seuil de limite flexible et son coût associé doivent être définis ensemble.

Représentation JSON
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
Champs
maxDuration

string (Duration format)

Limite stricte limitant la durée à la valeur maxDuration maximale.

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

softMaxDuration

string (Duration format)

Une limite flexible n'appliquant pas de limite de durée maximale, mais lorsqu'elle est enfreinte, entraîne un coût pour l'itinéraire. Ces coûts s'ajoutent aux autres coûts définis dans le modèle, avec la même unité.

S'il est défini, la valeur softMaxDuration ne doit pas être négative. Si maxDuration est également défini, softMaxDuration doit être inférieur à maxDuration.

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

quadraticSoftMaxDuration

string (Duration format)

Une limite flexible n'appliquant pas de limite de durée maximale, mais lorsqu'elle est enfreinte, entraîne un coût quadratique de la durée de l'itinéraire. Ces coûts s'ajoutent aux autres coûts définis dans le modèle, avec la même unité.

S'il est défini, la valeur quadraticSoftMaxDuration ne doit pas être négative. Si maxDuration est également défini, la valeur quadraticSoftMaxDuration doit être inférieure à maxDuration et la différence ne doit pas être supérieure à un jour:

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

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

costPerHourAfterSoftMax

number

Coût à l'heure encouru en cas de dépassement du seuil softMaxDuration. Le coût supplémentaire est égal à 0 si la durée est inférieure au seuil. Sinon, le coût dépend de la durée, comme suit:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

Le coût ne doit pas être négatif.

costPerSquareHourAfterQuadraticSoftMax

number

Coût par heure carrée facturé si le seuil de quadraticSoftMaxDuration est dépassé.

Le coût supplémentaire est égal à 0 si la durée est inférieure au seuil. Sinon, le coût dépend de la durée, comme suit:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

Le coût ne doit pas être négatif.

DistanceLimit

Limite définissant la distance maximale pouvant être parcourue. Il peut être difficile ou doux.

Si une limite flexible est définie, softMaxMeters et costPerKilometerAboveSoftMax doivent être définis tous les deux, et ne pas être négatifs.

Représentation JSON
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerAboveSoftMax": number
}
Champs
maxMeters

string (int64 format)

Une limite stricte limitant la distance à ne pas dépasser la valeur maxMeters. La limite ne doit pas être négative.

softMaxMeters

string (int64 format)

Une limite flexible n'appliquant pas de limite de distance maximale, mais en cas de violation entraîne un coût qui s'ajoute aux autres coûts définis dans le modèle, avec la même unité.

Si la valeur est définie pour softMaxMeters, la valeur doit être inférieure aux maxMeters et ne doit pas être négative.

costPerKilometerAboveSoftMax

number

Coût au kilomètre facturé si la distance est supérieure à la limite de softMaxMeters. Le coût supplémentaire est égal à 0 si la distance est inférieure à la limite. Dans le cas contraire, la formule utilisée pour calculer le coût est la suivante:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

Le coût ne doit pas être négatif.

BreakRule

Règles pour générer des pauses pour un véhicule (par exemple, des pauses déjeuner) Une pause est une période continue pendant laquelle le véhicule reste inactif à sa position actuelle et ne peut effectuer aucune visite. Une interruption peut se produire:

  • pendant le trajet entre deux visites (ce qui inclut le moment qui précède ou suit une visite, mais pas au milieu d'une visite), auquel cas le délai d'acheminement correspondant entre les visites est prolongé ;
  • ou avant le démarrage du véhicule (il se peut qu'il ne démarre pas au milieu d'une pause), auquel cas cela n'a aucune incidence sur l'heure de début du véhicule.
  • ou après l'arrêt du véhicule (identique à l'heure d'arrivée du véhicule).
Représentation JSON
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
Champs
breakRequests[]

object (BreakRequest)

Séquence de pauses. Consultez le message BreakRequest.

frequencyConstraints[]

object (FrequencyConstraint)

Plusieurs FrequencyConstraint peuvent s'appliquer. Ils doivent tous être satisfaits par les BreakRequest de ce BreakRule. Consultez FrequencyConstraint.

BreakRequest

La séquence de coupures (numéro et ordre) qui s'applique à chaque véhicule doit être connue au préalable. Les éléments BreakRequest répétés définissent cette séquence, dans l'ordre dans lequel ils doivent se produire. Leurs périodes (earliestStartTime / latestStartTime) peuvent se chevaucher, mais elles doivent être compatibles avec l'ordre (sélectionné).

Représentation JSON
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
Champs
earliestStartTime

string (Timestamp format)

Obligatoire. Limite inférieure (incluse) au début de la coupure.

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

latestStartTime

string (Timestamp format)

Obligatoire. Limite supérieure (incluse) au début de la coupure.

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

minDuration

string (Duration format)

Obligatoire. Durée minimale de la coupure. Doit être positive.

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

FrequencyConstraint

Vous pouvez restreindre davantage la fréquence et la durée des pauses spécifiées ci-dessus en appliquant une fréquence minimale de coupure, telle que "Il doit y avoir une pause d'au moins une heure toutes les 12 heures". En supposant que cela puisse être interprété comme : "Dans une fenêtre à durée flexible de 12 h, il doit y avoir au moins une pause d'au moins une heure", cet exemple se traduit par la valeur FrequencyConstraint suivante :

{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

L'heure et la durée des pauses dans la solution respecteront toutes ces contraintes, en plus des fenêtres temporelles et des durées minimales déjà spécifiées dans le BreakRequest.

En pratique, un FrequencyConstraint peut s'appliquer aux coupures non consécutives. Par exemple, la planification suivante respecte l'exemple "1 h toutes les 12 h" :

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
Représentation JSON
{
  "minBreakDuration": string,
  "maxInterBreakDuration": string
}
Champs
minBreakDuration

string (Duration format)

Obligatoire. Durée minimale de la coupure pour cette contrainte. Non négatif. Voir la description de FrequencyConstraint.

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

maxInterBreakDuration

string (Duration format)

Obligatoire. Délai maximal autorisé de n'importe quel intervalle de temps de la route qui n'inclut pas au moins une partie d'une interruption de duration >= minBreakDuration. Doit être positive.

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

DurationDistanceMatrix

Spécifie une matrice de durée et de distance entre les lieux de départ des visites et les points de départ des véhicules, jusqu'aux points de départ et d'arrivée des véhicules.

Représentation JSON
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
Champs
rows[]

object (Row)

Spécifie les lignes de la matrice de durée et de distance. Il doit comporter autant d'éléments que ShipmentModel.duration_distance_matrix_src_tags.

vehicleStartTag

string

Balise définissant les véhicules auxquels s'applique cette matrice de durée et de distance. Si ce champ est vide, il s'applique à tous les véhicules, et il ne peut y avoir qu'une seule matrice.

Chaque départ de véhicule doit correspondre exactement à une matrice, c'est-à-dire qu'un seul des champs startTags doit correspondre au vehicleStartTag d'une matrice (et de cette matrice uniquement).

Toutes les matrices doivent avoir un vehicleStartTag différent.

Row

Spécifie une ligne de la matrice de durée et de distance.

Représentation JSON
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
Champs
durations[]

string (Duration format)

Valeurs de durée pour une ligne donnée. Il doit comporter autant d'éléments que ShipmentModel.duration_distance_matrix_dst_tags.

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

meters[]

number

Valeurs de distance pour une ligne donnée. Si aucun coût ou aucune contrainte ne fait référence à des distances dans le modèle, ce champ peut être laissé vide. Dans le cas contraire, il doit comporter autant d'éléments que durations.

TransitionAttributes

Spécifie les attributs des transitions entre deux visites consécutives sur un itinéraire. Plusieurs TransitionAttributes peuvent s'appliquer à la même transition. Dans ce cas, tous les coûts supplémentaires s'additionnent et la contrainte ou la limite la plus stricte s'applique (selon la sémantique naturelle "AND").

Représentation JSON
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
Champs
srcTag

string

Les balises qui définissent l'ensemble des transitions (src->dst) auxquelles ces attributs s'appliquent.

Une visite à la source ou un départ de véhicule correspond si son VisitRequest.tags ou son Vehicle.start_tags contient srcTag ou ne contient pas excludedSrcTag (selon lequel de ces deux champs n'est pas vide).

excludedSrcTag

string

Consultez les srcTag. Un seul des champs srcTag et excludedSrcTag ne doit pas être vide.

dstTag

string

Une visite à la destination ou l'extrémité d'un véhicule correspond si son VisitRequest.tags ou son Vehicle.end_tags contient soit dstTag, soit pas excludedDstTag (selon lequel de ces deux champs n'est pas vide).

excludedDstTag

string

Consultez les dstTag. Un seul des champs dstTag et excludedDstTag ne doit pas être vide.

cost

number

Indique le coût de cette transition. Cette valeur est exprimée dans la même unité que tous les autres coûts du modèle et ne doit pas être négative. Il s'ajoute à tous les autres coûts existants.

costPerKilometer

number

Spécifie un coût au kilomètre appliqué à la distance parcourue lors de la transition. Il s'élève à n'importe quel Vehicle.cost_per_kilometer spécifié sur les véhicules.

distanceLimit

object (DistanceLimit)

Spécifie la limite de la distance parcourue lors de cette transition.

Depuis 2021/06, seules les limites souples sont acceptées.

delay

string (Duration format)

Spécifie le délai nécessaire lors de l'exécution de cette transition.

Ce retard se produit toujours après la fin de la visite de la source et avant le début de la visite de la destination.

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

ShipmentTypeIncompatibility

Spécifie les incompatibilités entre les expéditions en fonction de leur type d'expédition. L'affichage d'expéditions incompatibles sur un même itinéraire est limité en fonction du mode d'incompatibilité.

Représentation JSON
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
Champs
types[]

string

Liste des types incompatibles. Deux livraisons dont l'attribut shipment_types est différent de celles listées sont incompatibles.

incompatibilityMode

enum (IncompatibilityMode)

Mode appliqué à l'incompatibilité.

IncompatibilityMode

Modes définissant l'apparence d'expéditions incompatibles sur un même itinéraire

Enums
INCOMPATIBILITY_MODE_UNSPECIFIED Mode d'incompatibilité non spécifié. Cette valeur ne doit jamais être utilisée.
NOT_PERFORMED_BY_SAME_VEHICLE Dans ce mode, deux envois dont le type est incompatible ne peuvent jamais partager le même véhicule.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

Pour deux livraisons dont les types ne sont pas compatibles avec le mode d'incompatibilité NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY:

  • Si les deux services proposent uniquement des retraits (pas de livraisons) ou des livraisons uniquement (pas de retrait), le même véhicule ne peut pas être partagé.
  • Si l'un des envois comporte une livraison et l'autre un retrait, les deux envois peuvent partager le même véhicule si l'ancien envoi est livré avant que le second soit retiré.

ShipmentTypeRequirement

Spécifie les exigences entre les expéditions en fonction de leur type d'expédition. Les spécificités de l'exigence sont définies par le mode d'exigence.

Représentation JSON
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
Champs
requiredShipmentTypeAlternatives[]

string

Liste des autres types de livraison requis par le dependentShipmentTypes.

dependentShipmentTypes[]

string

Toutes les livraisons dont le type est indiqué dans le champ dependentShipmentTypes nécessitent la visite d'au moins une livraison de type requiredShipmentTypeAlternatives sur la même route.

REMARQUE: Les chaînes d'exigences telles que shipmentType dépend de lui-même ne sont pas autorisées.

requirementMode

enum (RequirementMode)

Mode appliqué à l'exigence.

RequirementMode

Modes définissant l'apparence des livraisons dépendantes sur un itinéraire.

Enums
REQUIREMENT_MODE_UNSPECIFIED Mode d'exigence non spécifié. Cette valeur ne doit jamais être utilisée.
PERFORMED_BY_SAME_VEHICLE Dans ce mode, tous les envois "dépendants" doivent partager le même véhicule qu'au moins l'un des envois "obligatoires".
IN_SAME_VEHICLE_AT_PICKUP_TIME

Avec le mode IN_SAME_VEHICLE_AT_PICKUP_TIME, tous les colis "dépendants" doivent avoir au moins un colis "obligatoire" dans leur véhicule au moment du retrait.

Un retrait d'un colis "dépendant" doit donc avoir l'une des valeurs suivantes:

  • d'un colis "obligatoire" réservé à la livraison et livré sur l'itinéraire suivant le ou
  • Un colis "obligatoire" récupéré sur l'itinéraire précédent. Si ce colis doit être livré, celui-ci doit être effectué après le retrait du colis "dépendant".
IN_SAME_VEHICLE_AT_DELIVERY_TIME Identique à la procédure précédente, à la différence que les livraisons "dépendantes" doivent être associées à une livraison "obligatoire" dans le véhicule au moment de la livraison.

PrecedenceRule

Règle de priorité entre deux événements (chaque événement étant le retrait ou la livraison d'un colis): le "deuxième" événement doit commencer au moins offsetDuration après le début du "premier".

Plusieurs priorités peuvent faire référence au même événement (ou à des événements associés). Par exemple, "Le retrait de B a lieu après la livraison de A" et "le retrait de C a lieu après le retrait de B".

De plus, les priorités ne s'appliquent que lorsque les deux expéditions sont effectuées et sont sinon ignorées.

Représentation JSON
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
Champs
firstIsDelivery

boolean

Indique si le "premier" événement est une diffusion.

secondIsDelivery

boolean

Indique si le "deuxième" événement est une diffusion.

offsetDuration

string (Duration format)

Décalage entre le "premier" et le "deuxième" événement. Elle peut être négative.

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

firstIndex

integer

Index des livraisons du "premier" événement. Ce champ doit être renseigné.

secondIndex

integer

Index des livraisons du "deuxième" événement. Ce champ doit être renseigné.