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 réduisant le coût global, qui correspond à la somme des éléments suivants:

  • le coût de l'itinéraire des véhicules (somme du coût par temps total, coût par temps de trajet et coût fixe pour tous les véhicules)
  • des pénalités d'expédition non appliqué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 expéditions à effectuer 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 la distance entre les valeurs globalEndTime et globalStartTime doit être inférieure ou égale à 3 153 000 secondes.

Lorsque 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, vous devez définir les limites de temps globales sur ce jour-là). Si cette règle n'est pas configurée, la valeur 00:00:00 UTC, 1er janvier 1970 (autrement dit, nombre de secondes: 0, nanos: 0) est utilisée par défaut.

Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. 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 00:00:00 UTC, 1er janvier 1971 (soit 31536000 secondes, nanos : 0) est utilisée par défaut.

Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. Exemples : "2014-10-02T15:01:23Z" et "2014-10-02T15:01:23.045123456Z".

globalDurationCostPerHour

number

La "durée globale" du plan global correspond à la différence entre l'heure de début effective au plus tôt et la dernière heure de fin effective de tous les véhicules. Les utilisateurs peuvent, par exemple, attribuer un coût par heure à cette quantité afin d'essayer d'optimiser les jobs pour les terminer au plus tôt. Ce coût doit être dans la même unité que 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 des distances géodésiques sont utilisés à la place, en fonction de la valeur du champ useGeodesicDistances. Si la valeur n'est pas vide, useGeodesicDistances ne peut pas être "true", et ni durationDistanceMatrixSrcTags ni durationDistanceMatrixDstTags ne peuvent être vides.

Exemples d'utilisation :

  • Il y a deux emplacements: locA et locB.
  • 1 véhicule commence son trajet à l'endroitA et l'arrête à l'endroitA.
  • 1 demande de visite de retrait chez locB.
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
    }
  }
}
  • Il y a trois emplacements: locA, locB et locC.
  • 1 véhicule commence son trajet au locA et l'arrête au locB, avec la matrice "rapide".
  • 1 véhicule commence son trajet au locB et l'arrête au locB, à l'aide d'une matrice "lent".
  • 1 véhicule commence son trajet au locB et l'arrête au locB, avec la matrice "rapide".
  • 1 demande de visite avec retrait sur 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. Dans la matrice i, durationDistanceMatrices(i).rows(j) définit la durée et la distance entre les visites avec la balise durationDistanceMatrixSrcTags(j) et les autres visites.

Les balises correspondent à VisitRequest.tags ou Vehicle.start_tags. Une valeur VisitRequest ou Vehicle donnée doit correspondre exactement à une balise de ce champ. Notez que les balises source, de destination et matricielles d'un Vehicle peuvent être identiques. De même, les balises 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 est obligatoire.

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 (correspondant à la distance) du trajet entre les visites associées à la balise durationDistanceMatrixSrcTags(j) et celles associées à la balise durationDistanceMatrixDstTags(k) dans la matrice i.

Les balises correspondent à VisitRequest.tags ou Vehicle.start_tags. Une valeur VisitRequest ou Vehicle donnée doit correspondre exactement à une balise de ce champ. Notez que les balises source, de destination et matricielles d'un Vehicle peuvent être identiques. De même, les balises 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 est obligatoire.

transitionAttributes[]

object (TransitionAttributes)

Attributs de transition ajoutés au modèle.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

Ensembles de types "shipment_types" incompatibles (voir ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

Ensembles d'exigences 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 s'il effectue au moins une livraison sur son itinéraire. Cela permet de limiter le nombre d'itinéraires lorsqu'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électionnera ensuite le meilleur sous-ensemble de véhicules à utiliser. Doit être strictement positif.

Livraison

Livraison d'un seul article, de l'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 rechange en conséquence), puis se rendre ultérieurement dans l'un de ses sites de livraison (et ainsi augmenter ses capacités de rechange 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 la livraison. Il peut comporter jusqu'à 63 caractères et utiliser des caractères UTF-8.

pickups[]

object (VisitRequest)

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

deliveries[]

object (VisitRequest)

Ensemble d'alternatives de livraison associées à la livraison. Si aucune valeur n'est spécifiée, le véhicule ne doit se rendre qu'à un lieu correspondant aux prises en charge.

loadDemands

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

Exigences relatives au chargement de la livraison (par exemple, le poids, le volume, le nombre de palettes, etc.) Les clés de la carte doivent être des identifiants décrivant le type de charge correspondante et, idéalement, incluant également les unités. Par exemple : "weight_kg", "volume_gallons", "pallet_count", etc. Si une clé donnée n'apparaît pas sur la carte, le chargement correspondant est considéré comme nul.

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

allowedVehicleIndices[]

integer

Ensemble des véhicules susceptibles d'effectuer cette livraison. Si ce champ est vide, tous les véhicules peuvent l'exécuter. Les véhicules sont indiqués en fonction de leur indice dans la liste vehicles de ShipmentModel.

costsPerVehicle[]

number

Indique le coût facturé lorsque la livraison est livrée par chaque véhicule. Si elle est spécifiée, elle doit SOIT:

  • le même nombre d'éléments que costsPerVehicleIndices. costsPerVehicle[i] correspond au costsPerVehicleIndices[i] du véhicule 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 véhicule n°i du modèle.

Ces coûts doivent appartenir à la même unité que 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

Indices des véhicules auxquels costsPerVehicle s'applique. Si ce champ n'est pas vide, il doit comporter le même nombre d'éléments que costsPerVehicle. Vous ne pouvez pas spécifier un attribut de véhicule plus d'une fois. Si un véhicule est exclu du costsPerVehicleIndices, son coût est nul.

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

Spécifie le délai absolu maximal du détour par rapport au trajet le plus court entre le retrait et la livraison. S'il est spécifié, il ne doit pas être négatif, et le colis doit contenir au moins un enlèvement et une livraison.

Par exemple, le délai le plus court peut être nécessaire pour passer directement de l'option de retrait choisie directement à l'alternative de livraison choisie. Ensuite, la définition de pickupToDeliveryAbsoluteDetourLimit applique:

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 retrait/livraison possible. Depuis 2017/10, les détours ne sont acceptés que lorsque la durée du trajet ne dépend pas du véhicule.

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

pickupToDeliveryTimeLimit

string (Duration format)

Spécifie la durée maximale entre le début du retrait et la livraison de la livraison. S'il est spécifié, il ne doit pas être négatif, et le colis doit contenir au moins un enlèvement et une livraison. Cela ne dépend pas des alternatives choisies pour le retrait et la livraison, ni de la vitesse du véhicule. Cette valeur peut être spécifiée parallèlement aux contraintes de détour maximales: la solution respecte les deux spécifications.

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

shipmentType

string

Chaîne non vide spécifiant un "type" pour cette livraison. Cette fonctionnalité peut être utilisée pour définir des incompatibilités ou des exigences entre shipment_types (voir shipmentTypeIncompatibilities et shipmentTypeRequirements dans ShipmentModel).

Différent de visitTypes, spécifié pour une seule visite: tous les retraits/livraisons appartenant à la même livraison partagent le même shipmentType.

label

string

Spécifie une étiquette pour ce colis. Cette étiquette est indiquée dans la réponse du shipmentLabel du ShipmentRoute.Visit correspondant.

ignore

boolean

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

Si vous ignorez une livraison, une erreur de validation est générée lorsque le modèle contient des shipmentTypeRequirements.

Il est possible d'ignorer une livraison effectuée dans les pays suivants : injectedFirstSolutionRoutes ou injectedSolutionConstraint. le résolveur supprime les visites en retrait/livraison associées de l'itinéraire actif. Les precedenceRules qui font référence à des livraisons ignorées seront également ignorées.

penaltyCost

number

Si l'expédition n'est pas finalisé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 des options de retrait et de livraison proposées est consulté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 aux coûts. Il doit être positif.

IMPORTANT: Si cette pénalité n'est pas spécifiée, elle est considérée comme infinie, c'est-à-dire que l'expédition doit être finalisée.

pickupToDeliveryRelativeDetourLimit

number

Spécifie le délai relatif maximal du détour par rapport au trajet le plus court entre la prise en charge et la livraison. S'il est spécifié, il ne doit pas être négatif, et le colis doit contenir au moins un enlèvement et une livraison.

Par exemple, le délai le plus court peut être nécessaire pour passer directement de l'option de retrait choisie directement à l'alternative de livraison choisie. Ensuite, la définition de pickupToDeliveryRelativeDetourLimit applique:

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 retrait/livraison possible. Depuis 2017/10, les détours ne sont acceptés que lorsque la durée du trajet ne dépend pas du véhicule.

VisitRequest

Demande de visite réalisable par un véhicule: elle comporte une géolocalisation (ou deux, voir ci-dessous), les heures d'ouverture et de fermeture représentées par des plages horaires, et la durée du service (temps passé par le véhicule une fois 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)

Géolocalisation à laquelle le véhicule arrive lors de l'exécution de cette VisitRequest. Si le modèle de livraison comporte des matrices de distance de durée, arrivalLocation ne doit pas être spécifié.

arrivalWaypoint

object (Waypoint)

Point de cheminement où arrive le véhicule lors de l'exécution de ce VisitRequest. Si le modèle de livraison comporte des matrices de distance de durée, arrivalWaypoint ne doit pas être spécifié.

departureLocation

object (LatLng)

Géolocalisation où le véhicule part après avoir terminé ce VisitRequest. Peut être omis s'il est identique à arrivalLocation. Si le modèle de livraison comporte des matrices de distance de durée, departureLocation ne doit pas être spécifié.

departureWaypoint

object (Waypoint)

Point de cheminement vers lequel le véhicule part après avoir terminé ce VisitRequest. Peut être omis s'il est identique à arrivalWaypoint. Si le modèle de livraison comporte des matrices de distance de durée, 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)

Fenêtres temporelles qui limitent l'heure d'arrivée à une visite. Notez qu'un véhicule peut partir en dehors de la plage horaire d'arrivée. Autrement dit, l'heure d'arrivée et la durée n'ont pas besoin d'être comprises dans un créneau horaire. Cela peut entraîner un délai 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 périodes doivent être disjointes, c'est-à-dire qu'aucune période ne doit se chevaucher ni se trouver adjacente, et elles doivent être classées par 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 neuf chiffres au maximum après la virgule et se terminant par "s". Exemple : "3.5s"

cost

number

Coût du service pour cette demande de visite sur un itinéraire en véhicule. Cela permet de payer des frais différents pour chaque retrait ou livraison d'un colis. Ce coût doit être dans la même unité que 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 au champ Shipment.load_demands, sauf qu'il ne s'applique qu'à ce champ VisitRequest, et non à l'ensemble du champ 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

Spécifie les types de visite. Cela peut permettre d'allouer le temps supplémentaire nécessaire au 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 indiqué dans la réponse sous la forme visitLabel dans le ShipmentRoute.Visit correspondant.

LatLng

Objet représentant une paire latitude/longitude. Elle 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 marquent les lieux d'arrivée et de départ des demandes de visite, et 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 être prioritaire pour que le véhicule s'arrête à un côté de la route en particulier. Lorsque vous définissez cette valeur, l'itinéraire passe par l'emplacement afin que le véhicule puisse s'arrêter sur le côté de la route vers lequel l'emplacement est orienté à partir du centre. Cette option ne fonctionne pas avec la commande "WALKING" (WALKING). moyen de transport.

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 en-tête facultatif.

placeId

string

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

Lieu

Encapsule un emplacement (un point géographique et un en-tête facultatif).

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

object (LatLng)

Coordonnées géographiques du point de cheminement

heading

integer

Direction associée au sens du flux de circulation. Cette valeur permet d'indiquer le côté de la route à utiliser pour les lieux de prise en charge et de dépose. Les valeurs d'en-tête peuvent être comprises entre 0 et 360, où 0 correspond à l'orientation vers le nord, 90 à l'est, etc.

TimeWindow

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

Les limites de la fenêtre stricte, startTime et endTime, appliquent l'heure la plus ancienne et la plus récente de l'événement, par exemple startTime <= event_time <= endTime. La limite inférieure de la fenêtre à durée flexible, softStartTime, exprime une préférence pour que l'événement se produise à softStartTime ou après, en encourant un coût proportionnel au temps écoulé avant que l'événement softStartTime ne se produise. La limite supérieure de la fenêtre à durée flexible, softEndTime, exprime une préférence pour que l'événement se produise à softEndTime ou avant, en encourant un coût proportionnel au temps 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 période difficile. Si aucune valeur n'est spécifiée, la valeur est ShipmentModel.global_start_time.

Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. Exemples : "2014-10-02T15:01:23Z" et "2014-10-02T15:01:23.045123456Z".

endTime

string (Timestamp format)

Heure de fin de la période difficile. Si aucune valeur n'est spécifiée, la valeur est ShipmentModel.global_end_time.

Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. Exemples : "2014-10-02T15:01:23Z" et "2014-10-02T15:01:23.045123456Z".

softStartTime

string (Timestamp format)

Heure de début en douceur de la fenêtre temporelle.

Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. Exemples : "2014-10-02T15:01:23Z" et "2014-10-02T15:01:23.045123456Z".

softEndTime

string (Timestamp format)

Heure de fin flexible de la période.

Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. Exemples : "2014-10-02T15:01:23Z" et "2014-10-02T15:01:23.045123456Z".

costPerHourBeforeSoftStartTime

number

Un 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

Un 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 en cas de problème d'expédition. La résolution d'un problème de livraison permet de créer un itinéraire entre le startLocation et le endLocation pour ce véhicule. Un itinéraire correspond à 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 part avant de récupérer une livraison. Si aucune valeur n'est spécifiée, le véhicule commence à la 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 un emplacement géographique où le véhicule part avant d'aller chercher une livraison Si les valeurs startWaypoint et startLocation ne sont pas spécifiées, le véhicule part dès son premier retrait. 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 s'arrête après avoir terminé son dernier VisitRequest. Si aucune valeur n'est spécifiée, le ShipmentRoute du véhicule se termine immédiatement lorsqu'il termine 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 un lieu géographique où le véhicule s'arrête une fois son dernier VisitRequest terminé. Si aucune des valeurs endWaypoint ni endLocation n'est spécifiée, la valeur ShipmentRoute du véhicule se termine immédiatement lorsqu'il termine son dernier 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 associé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 durant lesquelles le véhicule peut partir de sa position de départ. Ils doivent respecter les limites de temps globales (voir les champs ShipmentModel.global_*). Si elles ne sont pas spécifiées, 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, c'est-à-dire qu'aucune fenêtre temporelle ne peut se chevaucher ni être adjacente, et elles doivent être présentées 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 durant lesquelles le véhicule peut arriver à sa position d'arrivée. Ils doivent respecter les limites de temps globales (voir les champs ShipmentModel.global_*). Si elles ne sont pas spécifiées, 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, c'est-à-dire qu'aucune fenêtre temporelle ne peut se chevaucher ni être adjacente, et elles doivent être présentées 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 charge, conformément aux clés du champ Shipment.load_demands. Si une clé donnée n'est pas incluse dans 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 dans la même unité que Shipment.penalty_cost.

Coût par 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. L'utilisation de costPerHour au lieu de costPerTraveledHour seulement peut entraîner une latence supplémentaire.

costPerTraveledHour

number

Coût par heure parcourue sur l'itinéraire du véhicule. Ce coût ne s'applique qu'au temps de trajet emprunté par l'itinéraire (c'est-à-dire celui indiqué dans ShipmentRoute.transitions). Il exclut le temps d'attente et le temps de visite.

costPerKilometer

number

Coût par kilomètre de l'itinéraire du véhicule. Ce coût est appliqué à la distance indiquée dans les ShipmentRoute.transitions. Il ne s'applique pas aux distances implicitement parcourue entre le arrivalLocation et le departureLocation d'un même VisitRequest.

fixedCost

number

Un coût fixe s'applique si ce véhicule est utilisé pour gérer une livraison.

usedIfRouteIsEmpty

boolean

Ce champ ne s'applique qu'aux véhicules dont l'itinéraire ne desserve aucune livraison. Elle indique si le véhicule doit être considéré comme d'occasion ou non dans ce cas.

Si la valeur est définie sur "true", le véhicule va de son point de départ à son point d'arrivée même s'il ne desserve aucune livraison, et les coûts de temps et de distance liés à son départ --> à la fin du voyage sont pris en compte.

Sinon, il ne voyage pas entre son point de départ et sa position d'arrivée, et aucun breakRule ni retard (à partir de TransitionAttributes) n'est prévu pour ce véhicule. Dans ce cas, le ShipmentRoute du véhicule ne contient aucune information, à l'exception de l'indice 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 un OptimizeToursResponse donné, la durée de l'itinéraire d'un véhicule correspond à la différence entre sa vehicleEndTime et sa vehicleStartTime.

travelDurationLimit

object (DurationLimit)

Limite appliquée à la durée de trajet de l'itinéraire du véhicule. Dans une OptimizeToursResponse donnée, la durée du trajet est la somme de toutes les valeurs transitions.travel_duration de l'itinéraire.

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 correspond à la somme de tous ses transitions.travel_distance_meters.

extraVisitDurationForVisitType

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

Spécifie une correspondance entre les chaînes visitTypes et les durées. Cette durée correspond à la durée (en plus de VisitRequest.duration) à effectuer pour les visites correspondant à la valeur visitTypes spécifiée. Cette durée de visite supplémentaire entraîne des frais si costPerHour est spécifié. Les clés (par exemple, 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 à ce véhicule. Si ce champ est vide, aucun pause ne sera programmé pour ce véhicule.

label

string

Spécifie un libellé pour ce véhicule. Cette étiquette est indiquée dans la réponse en tant que vehicleLabel du ShipmentRoute correspondant.

ignore

boolean

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

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

Si une livraison est effectuée par un véhicule ignoré dans injectedSolutionConstraint et que tous les enlèvements/livraisons associés sont contraints de rester dans le véhicule (c'est-à-dire qu'ils ne sont pas assouplis au niveau RELAX_ALL_AFTER_THRESHOLD), il est ignoré dans la réponse. Si un colis comporte un champ allowedVehicleIndices non vide et que tous les véhicules autorisés sont ignorés, il est ignoré dans la réponse.

travelDurationMultiple

number

Spécifie un facteur multiplicatif pouvant être utilisé pour augmenter ou réduire les temps de trajet de ce véhicule. Par exemple, la valeur 2.0 signifie que le véhicule est plus lent et présente des temps de trajet deux fois supérieurs à ceux des véhicules standards. Ce multiple n'a aucune incidence sur la durée des visites. Cela affecte le coût si costPerHour ou costPerTraveledHour sont spécifiés. Elle doit être comprise dans la plage [0,001, 1 000,0]. Si cette valeur n'est pas définie, le véhicule est de type standard, et ce multiple est considéré comme égal à 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 toute opération numérique, 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 de l'API Routes Preferred de Google Maps Platform. Consultez la page 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 (voiture, etc.)
WALKING Mode de transport correspondant à l'itinéraire à pied

UnloadingPolicy

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

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

Enums
UNLOADING_POLICY_UNSPECIFIED Règle de déchargement non spécifiée. les livraisons doivent avoir lieu juste après leurs retraits correspondants.
LAST_IN_FIRST_OUT Les livraisons doivent être effectuées 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 qui s'applique à un véhicule (par exemple, "ce camion ne doit pas peser 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 la charge dépasse softMaxLoad sur l'itinéraire de ce véhicule, la pénalité liée aux coûts est la suivante (une seule fois par véhicule): (charge - softMaxLoad) * costPerUnitAboveSoftMax. Tous les coûts s'additionnent et doivent être dans la même unité que 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 pour le véhicule à la fin de l'itinéraire.

maxLoad

string (int64 format)

Quantité de charge maximale acceptable.

Intervalle

Intervalle entre des volumes de chargement acceptables.

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

string (int64 format)

Charge minimale acceptable Doit être ≥ 0. Si les deux sont spécifiés, min doit être ≤ max.

max

string (int64 format)

Charge maximale acceptable Doit être ≥ 0. Si elle n'est pas spécifiée, ce message ne limite pas la charge maximale. Si les deux sont spécifiés, min doit être ≤ max.

DurationLimit

Limite définissant la durée maximale de l'itinéraire d'un véhicule. Elle peut être soit difficile, soit douce.

Lorsqu'un champ de limite flexible est défini, le seuil maximal 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 qui impose une durée maximale à la durée maximale.

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

softMaxDuration

string (Duration format)

Une limite flexible n'applique pas de limite de durée maximale, mais lorsqu'elle n'est pas respectée, la route entraîne des frais. Ce coût s'ajoute aux autres coûts définis dans le modèle, avec la même unité.

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

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

quadraticSoftMaxDuration

string (Duration format)

Une limite flexible n'applique pas de limite de durée maximale, mais lorsqu'elle n'est pas respectée, la route entraîne des frais, du point de vue quadratique. Ce coût s'ajoute aux autres coûts définis dans le modèle, avec la même unité.

Si la valeur quadraticSoftMaxDuration est définie, elle ne doit pas être négative. Si maxDuration est également défini, quadraticSoftMaxDuration doit être inférieur à maxDuration, et la différence ne doit pas dépasser un jour:

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

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

costPerHourAfterSoftMax

number

Coût horaire facturé si le seuil de softMaxDuration n'est pas respecté. 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 engagé si le seuil de quadraticSoftMaxDuration n'est pas respecté.

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. Elle peut être soit difficile, soit douce.

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

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

string (int64 format)

Limite stricte qui limite la distance à maxMeters. La limite ne doit pas être négative.

softMaxMeters

string (int64 format)

Une limite flexible n'applique pas de limite de distance maximale, mais en cas de non-respect, les coûts qui s'ajoutent aux autres coûts définis dans le modèle, avec la même unité, sont ajoutés.

Si la valeur softMaxMeters est définie, elle doit être inférieure à la valeur maxMeters et doit être non 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. Sinon, 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 permettant de générer des pauses pour un véhicule (par exemple, des pauses déjeuner) Une pause est une période continue au cours de laquelle le véhicule reste inactif à sa position actuelle et ne peut effectuer aucune visite. Une pause peut se produire:

  • Au cours du trajet entre deux visites (qui inclut le temps écoulé juste avant ou juste après une visite, mais pas en cours de visite), auquel cas le délai d'acheminement correspondant est prolongé entre les visites.
  • ou avant le démarrage du véhicule (il ne doit pas démarrer en plein milieu d'une pause), auquel cas l'heure de début du véhicule n'est pas affectée.
  • ou après la fin du véhicule (identifié, avec l'heure de fin du véhicule).
Représentation JSON
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
Champs
breakRequests[]

object (BreakRequest)

Séquence de coupures publicitaires. Consultez le message BreakRequest.

frequencyConstraints[]

object (FrequencyConstraint)

Des FrequencyConstraint peuvent s'appliquer. Elles doivent toutes être satisfaites par les BreakRequest de ce BreakRule. Voir FrequencyConstraint.

BreakRequest

Vous devez connaître au préalable l'ordre des coupures (c'est-à-dire leur numéro et leur ordre) applicable à chaque véhicule. Les BreakRequest répétées définissent cette séquence, dans l'ordre dans lequel elles doivent apparaître. Leurs périodes (earliestStartTime / latestStartTime) peuvent se chevaucher, mais elles doivent être compatibles avec l'ordre (cette option est cochée).

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

Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. 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 publicitaire.

Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. 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 neuf chiffres au maximum après la virgule et se terminant par "s". Exemple : "3.5s"

FrequencyConstraint

Vous pouvez également limiter la fréquence et la durée des coupures spécifiées ci-dessus, en appliquant une fréquence minimale de coupure publicitaire, telle que "Une pause d'au moins une heure toutes les 12 heures". En supposant que cela puisse être interprété comme "Dans toute fenêtre glissante de 12 heures, il doit y avoir au moins une pause d'au moins une heure", cet exemple se traduirait par le FrequencyConstraint suivant:

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

Le moment et la durée des coupures dans la solution respectent l'ensemble de ces contraintes, en plus des fenêtres temporelles et des durées minimales déjà spécifiées dans BreakRequest.

Dans la pratique, une clause FrequencyConstraint peut s'appliquer à des coupures non consécutives. Par exemple, la programmation suivante respecte l'horaire "1h toutes les 12h" Exemple:

  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 coupure pour cette contrainte. Non négatif. Voir la description de FrequencyConstraint.

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

maxInterBreakDuration

string (Duration format)

Obligatoire. Durée maximale autorisée de tout intervalle de temps de l'itinéraire n'incluant pas au moins partiellement une pause de duration >= minBreakDuration. Doit être positive.

Durée en secondes avec neuf chiffres au maximum après la virgule et 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 des véhicules à visiter, et les lieux 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. Elle doit comporter autant d'éléments que ShipmentModel.duration_distance_matrix_src_tags.

vehicleStartTag

string

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

Chaque démarrage de véhicule doit correspondre exactement à une matrice. Autrement dit, un seul de leurs champs startTags doit correspondre au vehicleStartTag d'une matrice (et de cette matrice uniquement).

Toutes les matrices doivent avoir un vehicleStartTag différent.

Ligne

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. Elle doit comporter autant d'éléments que ShipmentModel.duration_distance_matrix_dst_tags.

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

meters[]

number

Valeurs de distance pour une ligne donnée. Si aucun coût ni aucune contrainte ne font référence aux distances dans le modèle, vous pouvez laisser ce champ vide. Sinon, 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 (en suivant 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

Tags définissant l'ensemble de transitions (src->dst) auxquelles ces attributs s'appliquent.

Une visite à la source ou le début d'un véhicule correspond si sa 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. Une seule valeur pour srcTag et excludedSrcTag ne doit pas être vide.

dstTag

string

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

excludedDstTag

string

Consultez les dstTag. Une seule valeur pour dstTag et excludedDstTag ne doit pas être vide.

cost

number

Spécifie un coût pour effectuer cette transition. Cette valeur est dans la même unité que tous les autres coûts du modèle et ne doit pas être négative. Il s'applique à tous les autres coûts existants.

costPerKilometer

number

Spécifie un coût par kilomètre appliqué à la distance parcourue lors de cette transition. Cela correspond à la valeur Vehicle.cost_per_kilometer spécifiée pour les véhicules.

distanceLimit

object (DistanceLimit)

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

Depuis le 6 février 2021, seules les limites souples sont acceptées.

delay

string (Duration format)

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

Ce délai survient toujours après la fin de la visite de la source et avant le début de la visite de destination.

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

ShipmentTypeIncompatibility

Spécifie les incompatibilités entre les envois en fonction de la valeur "shipmentType". L'apparence des colis incompatibles sur le même itinéraire est limitée en raison 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 parmi celles listées sont "incompatibles".

incompatibilityMode

enum (IncompatibilityMode)

Mode appliqué à l'incompatibilité.

IncompatibilityMode

Modes définissant la façon dont l'apparition des colis incompatibles est limitée sur le 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 les types sont incompatibles ne peuvent jamais partager le même véhicule.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

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

  • Si les deux services concernent uniquement les retraits (pas de livraison) ou les livraisons (pas de retraits), ils ne peuvent pas partager le même véhicule.
  • Si l'un des envois comprend une livraison et l'autre un retrait, les deux envois peuvent partager le même véhicule si la première livraison est livrée avant que la seconde ne soit retirée.

ShipmentTypeRequirement

Spécifie les exigences entre les envois en fonction de la valeur "shipmentType". Les spécificités de l'exigence sont définies par le mode de l'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

Pour tous les colis dont le type est défini dans le champ dependentShipmentTypes, il faut qu'au moins un colis de type requiredShipmentTypeAlternatives soit visité sur le même itinéraire.

REMARQUE: Les chaînes d'exigences telles qu'un 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 colis dépendants 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 rôles les livraisons doivent partager le même véhicule qu'au moins un des livraisons.
IN_SAME_VEHICLE_AT_PICKUP_TIME

Avec le mode IN_SAME_VEHICLE_AT_PICKUP_TIME, tous les éléments "dépendants" les livraisons doivent comporter au moins un envoi "obligatoire" le colis sur son véhicule au moment de la prise en charge.

Une entité « dépendante » L'attribut "retrait à la livraison" doit donc être associé à l'un des attributs suivants:

  • Une valeur "obligatoire" pour une livraison uniquement livraison livrée sur l'itinéraire après, ou
  • Une valeur "obligatoire" le colis a été retiré sur l'itinéraire le plus tôt et, si la valeur « obligatoire » comporte une livraison, celle-ci doit être effectuée après la date de livraison le retrait du colis.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Identiques à l'étape précédente, à l'exception de la variable les livraisons doivent présenter un attribut "obligatoire" sur leur véhicule au moment de la livraison.

PrecedenceRule

Règle de priorité entre deux événements (chaque événement correspond au retrait ou à la livraison d'une livraison): le "deuxième" l'événement doit commencer au moins offsetDuration après le "premier" a commencé.

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

De plus, les priorités s'appliquent uniquement 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 la "première" est une livraison.

secondIsDelivery

boolean

Indique si la "seconde" est une livraison.

offsetDuration

string (Duration format)

Le décalage entre la "première" et "deuxième" . Elle peut être négative.

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

firstIndex

integer

Indice de livraison du "premier" . Ce champ doit être renseigné.

secondIndex

integer

Indice de livraison du "deuxième" . Ce champ doit être renseigné.