ShipmentModel

Un modèle d'expédition 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 du coût par temps total, du coût par temps de trajet et du coût fixe pour tous les véhicules).
  • les pénalités liées aux envois non effectués.
  • le coût de la durée globale des envois ;
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 d'envois qui doivent être effectués 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'globalEndTime et l'globalStartTime doivent être séparés d'au plus 31 536 000 secondes.

Lorsque vous utilisez des champs cost_per_*hour, vous pouvez définir cette fenêtre sur un intervalle plus court pour améliorer les performances (par exemple, si vous modélisez un seul jour, vous devez définir les limites temporelles globales sur ce jour). Si cette valeur n'est pas définie, la valeur par défaut est 00:00:00 UTC, 1er janvier 1970 (c'est-à-dire secondes: 0, nanos: 0).

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 valeur n'est pas définie, la valeur par défaut est 00:00:00 UTC, 1er janvier 1971 (c'est-à-dire secondes: 31536000, nanos: 0).

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 la première heure de début effective et la dernière heure de fin effective de tous les véhicules. Les utilisateurs peuvent attribuer un coût par heure à cette quantité pour essayer d'optimiser la réalisation de la tâche le plus rapidement possible, par exemple. Ce coût doit être exprimé dans les mêmes unités 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 les distances géodésiques sont utilisées à la place, en fonction de la valeur du champ useGeodesicDistances. Si ce n'est pas le cas, useGeodesicDistances ne peut pas être défini sur "true", et durationDistanceMatrixSrcTags ni durationDistanceMatrixDstTags ne peuvent être vides.

Exemples d'utilisation :

  • Il existe deux emplacements: locA et locB.
  • 1 véhicule commençant son trajet à locA et le terminant à locA.
  • 1 demande de retrait à l'emplacement 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 existe trois emplacements: locA, locB et locC.
  • 1 véhicule commençant son trajet à locA et l'achevant à locB, en utilisant la matrice "rapide".
  • 1 véhicule commençant son trajet à locB et le terminant à locB, en utilisant la matrice "slow".
  • 1 véhicule commençant son trajet à locB et le terminant à locB, en utilisant la matrice "rapide".
  • 1 demande de retrait à l'emplacement 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 des visites avec la balise durationDistanceMatrixSrcTags(j) par rapport aux autres visites de la matrice i.

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

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

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

transitionAttributes[]

object (TransitionAttributes)

Attributs de transition ajoutés au modèle.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

Ensembles de types de livraison incompatibles (voir ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

Ensembles d'exigences shipmentType (voir ShipmentTypeRequirement).

precedenceRules[]

object (PrecedenceRule)

Ensemble de règles de priorité qui doivent être appliquées dans le modèle.

maxActiveVehicles

integer

Limite le nombre maximal de véhicules actifs. Un véhicule est considéré comme actif si son itinéraire effectue au moins une livraison. Vous pouvez l'utiliser pour limiter le nombre d'itinéraires dans le cas où il y a moins de conducteurs que de véhicules et que la flotte 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

Expédition d'un seul article, de l'un de ses enlèvements à l'un de ses envois. Pour que la livraison soit considérée comme effectuée, un véhicule unique doit se rendre à l'un de ses points de collecte (et réduire ses capacités de réserve en conséquence), puis à l'un de ses points de livraison par la suite (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 de l'envoi défini par l'utilisateur. Il peut comporter jusqu'à 63 caractères et utiliser des caractères UTF-8.

pickups[]

object (VisitRequest)

Ensemble d'options de retrait associées à l'envoi. Si ce n'est pas le cas, le véhicule n'a besoin de se rendre que dans un lieu correspondant aux livraisons.

deliveries[]

object (VisitRequest)

Ensemble d'options de livraison associées à l'envoi. Si ce n'est pas le cas, le véhicule n'a besoin de se rendre que dans un lieu correspondant aux enlèvements.

loadDemands

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

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

allowedVehicleIndices[]

integer

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

costsPerVehicle[]

number

Indique le coût encouru lorsque cette livraison est effectuée par chaque véhicule. S'il est spécifié, il doit avoir:

  • 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 que de véhicules dans le modèle. L'élément i correspond au véhicule i du modèle.

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

costsPerVehicleIndices[]

integer

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

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

Indique la durée maximale du détour absolu par rapport au chemin le plus court entre le point de collecte et la livraison. Si elle est spécifiée, elle doit être non négative, et l'envoi doit contenir au moins un retrait et une livraison.

Par exemple, prenons t comme temps le plus court pour passer directement de l'option de retrait sélectionnée à l'option de livraison sélectionnée. Le paramètre pickupToDeliveryAbsoluteDetourLimit applique ensuite les éléments suivants:

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

Si des limites relatives et absolues sont spécifiées pour le même envoi, la limite la plus contraignante est utilisée pour chaque paire de ramassage/livraison possible. Depuis octobre 2017, les détours ne sont acceptés que lorsque les durées de trajet ne dépendent pas des véhicules.

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 de la collecte et le début de la livraison d'un envoi. Si elle est spécifiée, elle doit être non négative, et l'envoi doit contenir au moins un retrait et une livraison. Cela ne dépend pas des options sélectionnées pour le retrait et la livraison, ni de la vitesse du véhicule. Vous pouvez le spécifier avec des contraintes de déviation maximales: la solution respectera 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 cet envoi. Cette fonctionnalité peut être utilisée pour définir des incompatibilités ou des exigences entre les shipment_types (voir shipmentTypeIncompatibilities et shipmentTypeRequirements dans ShipmentModel).

Diffère de visitTypes, qui est spécifié pour une seule visite: tous les retraits/livraisons appartenant au même envoi partagent le même shipmentType.

label

string

Indique un libellé pour cette expédition. Ce libellé est indiqué dans la réponse dans le shipmentLabel de l'ShipmentRoute.Visit correspondante.

ignore

boolean

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

Ignorer un envoi génère une erreur de validation lorsqu'il existe des shipmentTypeRequirements dans le modèle.

Vous pouvez ignorer une livraison effectuée en injectedFirstSolutionRoutes ou injectedSolutionConstraint. Le solveur supprime les visites de ramassage/livraison associées du parcours de livraison. Les precedenceRules qui font référence à des envois ignorés seront également ignorés.

penaltyCost

number

Si l'envoi n'est pas effectué, cette pénalité est ajoutée au coût global des itinéraires. Un envoi est considéré comme terminé si l'une des options de retrait et de livraison est utilisée. Le coût peut être exprimé dans les mêmes unités que celles utilisées pour tous les autres champs liés aux coûts du modèle et 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'envoi doit être effectué.

pickupToDeliveryRelativeDetourLimit

number

Indique le temps de déviation maximal par rapport au chemin le plus court entre le point de collecte et la livraison. Si elle est spécifiée, elle doit être non négative, et l'envoi doit contenir au moins un retrait et une livraison.

Par exemple, prenons t comme temps le plus court pour passer directement de l'option de retrait sélectionnée à l'option de livraison sélectionnée. Le paramètre pickupToDeliveryRelativeDetourLimit applique ensuite les éléments suivants:

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

Si des limites relatives et absolues sont spécifiées pour le même envoi, la limite la plus contraignante est utilisée pour chaque paire de ramassage/livraison possible. Depuis octobre 2017, les détours ne sont acceptés que lorsque les durées de trajet ne dépendent pas des véhicules.

VisitRequest

Demande de visite pouvant être effectuée par un véhicule: elle comporte une géolocalisation (ou deux, voir ci-dessous), des heures d'ouverture et de fermeture représentées par des plages horaires, ainsi qu'une durée de service (temps passé par le véhicule une fois arrivé pour récupérer ou déposer des 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)

Position géographique où le véhicule arrive lors de l'exécution de cette VisitRequest. Si le modèle d'expédition comporte des matrices de distance-durée, arrivalLocation ne doit pas être spécifié.

arrivalWaypoint

object (Waypoint)

Point de repère où le véhicule arrive lors de l'exécution de cette VisitRequest. Si le modèle d'expédition comporte des matrices de distance-durée, arrivalWaypoint ne doit pas être spécifié.

departureLocation

object (LatLng)

Position géographique du véhicule à son départ après avoir terminé cette VisitRequest. Peut être omis s'il est identique à arrivalLocation. Si le modèle d'expédition comporte des matrices de distance-durée, departureLocation ne doit pas être spécifié.

departureWaypoint

object (Waypoint)

Point d'intérêt à partir duquel le véhicule part après avoir terminé cette VisitRequest. Peut être omis s'il est identique à arrivalWaypoint. Si le modèle d'expédition comporte des matrices de distance-durée, departureWaypoint ne doit pas être spécifié.

tags[]

string

Spécifie les balises associées à la requête 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 lors d'une visite. Notez qu'un véhicule peut partir en dehors de la période d'arrivée, c'est-à-dire que l'heure d'arrivée + la durée ne doivent pas se trouver dans une période. 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 périodes doivent être disjointes, c'est-à-dire qu'aucune ne doit se chevaucher ni être adjacente à une autre. Elles doivent également être triées par ordre croissant.

costPerHourAfterSoftEndTime et softEndTime ne peuvent être définis que s'il n'y a qu'une seule période.

duration

string (Duration format)

Durée de la visite, c'est-à-dire 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 de traitement de cette demande de visite sur un itinéraire de véhicule. Vous pouvez ainsi payer des frais différents pour chaque mode de retrait ou de livraison alternatif d'un colis. Ce coût doit être exprimé dans les mêmes unités que Shipment.penalty_cost et ne doit pas être négatif.

loadDemands

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

Chargez les demandes de cette requête de visite. Il s'agit du même champ Shipment.load_demands, mais il ne s'applique qu'à ce VisitRequest au lieu de l'ensemble du Shipment. Les demandes listées ici sont ajoutées à celles listées dans Shipment.load_demands.

visitTypes[]

string

Indique les types de visites. 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 indiqué dans la réponse sous la forme 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 demandes de visite, 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 est destiné à indiquer au véhicule de s'arrêter d'un côté particulier de la route. Lorsque vous définissez cette valeur, l'itinéraire passe par l'emplacement afin que le véhicule puisse s'arrêter du côté de la route vers lequel l'emplacement est orienté par rapport au centre de la route. Cette option ne fonctionne pas avec le mode de déplacement "À PIED".

Champ d'union location_type. Différentes façons de représenter un emplacement. 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 d'un angle de visée facultatif.

placeId

string

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

Lieu

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

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

object (LatLng)

Coordonnées géographiques du point de cheminement.

heading

integer

Direction indiquée par la boussole associée au sens du trafic. Cette valeur permet de spécifier le côté de la route à emprunter pour le ramassage et le dépôt. Les valeurs de cap peuvent varier de 0 à 360, où 0 indique un cap au nord, 90 un cap à l'est, etc.

TimeWindow

Les périodes de temps limitent l'heure d'un événement, comme l'heure d'arrivée d'une visite ou les heures de début et de fin d'un véhicule.

Les limites de la période d'exécution stricte, startTime et endTime, définissent la date et l'heure de début et de fin de l'événement, de sorte que startTime <= event_time <= endTime. La limite inférieure de la période temporelle souple, softStartTime, indique une préférence pour que l'événement se produise à partir de softStartTime, en générant un coût proportionnel au temps écoulé avant le début de la période temporelle souple. La limite supérieure de la fenêtre temporelle souple, softEndTime, indique une préférence pour que l'événement se produise à softEndTime ou avant, en générant un coût proportionnel au temps écoulé après softEndTime. startTime, endTime, softStartTime et softEndTime doivent respecter les limites de temps globales (voir ShipmentModel.global_start_time et ShipmentModel.global_end_time) et les éléments suivants:

  0 <= `startTime` <= `endTime` and
  0 <= `startTime` <= `softStartTime` and
  0 <= `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 de temps fixe. Si aucune valeur n'est spécifiée, elle est définie sur 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 fixe. Si aucune valeur n'est spécifiée, elle est définie sur 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 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".

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

Coût par heure ajouté aux autres coûts du modèle si l'événement se produit avant le début souple, 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 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 de livraison. Si vous résolvez un problème d'expédition, un itinéraire commençant à 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),
  "routeModifiers": {
    object (RouteModifiers)
  },
  "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 déplacement qui affecte les routes utilisables par le véhicule et sa vitesse. Consultez également travelDurationMultiple.

routeModifiers

object (RouteModifiers)

Ensemble de conditions à respecter qui affectent la façon dont les itinéraires sont calculés pour le véhicule donné.

startLocation

object (LatLng)

Emplacement géographique où le véhicule commence avant de récupérer des envois. Si cette valeur n'est pas spécifiée, le véhicule démarre à son premier retrait. Si le modèle d'expédition comporte des matrices de durée et de distance, startLocation ne doit pas être spécifié.

startWaypoint

object (Waypoint)

Point de repère représentant un emplacement géographique où le véhicule commence avant de récupérer des envois. Si vous ne spécifiez pas startWaypoint ni startLocation, le véhicule démarre à son premier ramassage. Si le modèle d'expédition 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 avoir terminé sa dernière VisitRequest. Si elle n'est pas spécifiée, la ShipmentRoute du véhicule se termine immédiatement à la fin de sa dernière VisitRequest. Si le modèle d'expédition 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 se termine après avoir terminé sa dernière VisitRequest. Si vous ne spécifiez ni endWaypoint ni endLocation, la ShipmentRoute du véhicule se termine immédiatement lorsqu'il termine son dernier VisitRequest. Si le modèle d'expédition comporte des matrices de durée et de distance, endWaypoint ne doit pas être spécifié.

startTags[]

string

Spécifie les balises associées au début du trajet du véhicule.

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

endTags[]

string

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

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

startTimeWindows[]

object (TimeWindow)

Intervalles de temps pendant lesquels le véhicule peut quitter son point de départ. Elles doivent respecter les limites de temps globales (voir les champs ShipmentModel.global_*). Si aucune valeur n'est spécifiée, aucune limite n'est appliquée en dehors de ces limites globales.

Les périodes appartenant au même champ répété doivent être disjointes, c'est-à-dire qu'aucune période ne peut se chevaucher ni être adjacente à une autre. Elles doivent également être présentées dans l'ordre chronologique.

costPerHourAfterSoftEndTime et softEndTime ne peuvent être définis que s'il n'y a qu'une seule période.

endTimeWindows[]

object (TimeWindow)

Périodes pendant lesquelles le véhicule peut arriver à sa destination. Elles doivent respecter les limites de temps globales (voir les champs ShipmentModel.global_*). Si aucune valeur n'est spécifiée, aucune limite n'est appliquée en dehors de ces limites globales.

Les périodes appartenant au même champ répété doivent être disjointes, c'est-à-dire qu'aucune période ne peut se chevaucher ni être adjacente à une autre. Elles doivent également être présentées dans l'ordre chronologique.

costPerHourAfterSoftEndTime et softEndTime ne peuvent être définis que s'il n'y a qu'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 est absente de ce mappage, la capacité correspondante est considérée comme illimitée.

costPerHour

number

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

Coût par heure du trajet du véhicule. Ce coût est appliqué au temps total de l'itinéraire, et comprend le temps de trajet, le temps d'attente et le temps de visite. L'utilisation de costPerHour au lieu de costPerTraveledHour 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 de l'itinéraire (c'est-à-dire celui indiqué dans ShipmentRoute.transitions) et exclut le temps d'attente et le temps de visite.

costPerKilometer

number

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

fixedCost

number

Coût fixe appliqué si ce véhicule est utilisé pour gérer un envoi.

usedIfRouteIsEmpty

boolean

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

Si cette valeur est définie sur "true", le véhicule se déplace de son point de départ à son point d'arrivée, même s'il ne dessert aucun envoi. Les coûts de temps et de distance résultant de son trajet de départ à destination sont pris en compte.

Sinon, il ne se déplace pas de son point de départ à son point 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, sauf l'indice et le libellé du véhicule.

routeDurationLimit

object (DurationLimit)

Limite appliquée à la durée totale du trajet du véhicule. Dans un OptimizeToursResponse donné, la durée du trajet d'un véhicule correspond à la différence entre son vehicleEndTime et son vehicleStartTime.

travelDurationLimit

object (DurationLimit)

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

routeDistanceLimit

object (DistanceLimit)

Limite appliquée à la distance totale du trajet du véhicule. Dans un OptimizeToursResponse donné, la distance du parcours correspond à la somme de tous ses transitions.travel_distance_meters.

extraVisitDurationForVisitType

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

Spécifie une mise en correspondance des chaînes "visitTypes" avec des durées. La durée correspond au temps supplémentaire à prendre en plus de VisitRequest.duration lors des visites avec la visitTypes spécifiée. Cette durée de visite supplémentaire entraîne des coûts si costPerHour est spécifié. Les clés (visitTypes, par exemple) ne peuvent pas être des chaînes vides.

Si une demande de visite comporte plusieurs types, une durée est ajoutée pour chaque type dans la carte.

breakRule

object (BreakRule)

Décrit le calendrier des pauses à appliquer à ce véhicule. Si ce champ est vide, aucune pause ne sera planifiée pour ce véhicule.

label

string

Spécifie un libellé pour ce véhicule. Ce libellé est indiqué dans la réponse sous la forme vehicleLabel du ShipmentRoute correspondant.

ignore

boolean

Si la valeur est "true", usedIfRouteIsEmpty doit être définie sur "false", et ce véhicule restera inutilisé.

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

Si une livraison est effectuée par un véhicule ignoré dans injectedSolutionConstraint et que toute collecte/livraison associée doit rester sur le véhicule (c'est-à-dire qu'elle n'est pas assouplie au niveau RELAX_ALL_AFTER_THRESHOLD), elle est ignorée dans la réponse. Si un envoi 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 multiplicateur qui peut être utilisé pour augmenter ou diminuer les temps de trajet de ce véhicule. Par exemple, si vous définissez cette valeur sur 2,0, ce véhicule est plus lent et ses temps de trajet sont deux fois plus longs que ceux des véhicules standards. Ce multiple n'a aucune incidence sur la durée des visites. Elle a une incidence sur les coûts si costPerHour ou costPerTraveledHour sont spécifiés. Cette valeur doit être comprise dans la plage [0,001, 1 000,0]. Si ce champ n'est pas défini, le véhicule est standard et ce multiple est considéré comme étant égal à 1, 0.

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

Voir également 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. Pour en savoir plus, 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 aux itinéraires routiers (voiture, etc.).
WALKING Mode de transport correspondant aux itinéraires à pied.

RouteModifiers

Encapsule un ensemble de conditions facultatives à respecter lors du calcul des itinéraires des véhicules. Cela ressemble à RouteModifiers dans l'API Google Maps Platform Routes Preferred (Itinéraires préférés) : consultez https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.

Représentation JSON
{
  "avoidTolls": boolean,
  "avoidHighways": boolean,
  "avoidFerries": boolean,
  "avoidIndoor": boolean
}
Champs
avoidTolls

boolean

Indique si les routes à péage doivent être évitées dans la mesure du possible. Les itinéraires ne comportant pas de routes à péage seront privilégiés. Ne s'applique qu'aux modes de transport motorisés.

avoidHighways

boolean

Indique si les autoroutes doivent être évitées dans la mesure du possible. Les itinéraires ne comportant pas d'autoroutes seront privilégiés. Ne s'applique qu'aux modes de transport motorisés.

avoidFerries

boolean

Indique si les ferries doivent être évités dans la mesure du possible. Les itinéraires ne comportant pas de trajets en ferry seront privilégiés. Ne s'applique qu'aux modes de transport motorisés.

avoidIndoor

boolean

Facultatif. Indique si la navigation en intérieur doit être évitée dans la mesure du possible. Les itinéraires ne comportant pas de navigation intérieure seront privilégiés. Ne s'applique qu'au mode de déplacement WALKING.

UnloadingPolicy

Règles concernant le déchargement d'un véhicule. Ne s'applique qu'aux envois comportant à la fois un retrait et une livraison.

Les autres envois peuvent se produire n'importe où sur le parcours, indépendamment de unloadingPolicy.

Enums
UNLOADING_POLICY_UNSPECIFIED Règle de déchargement non spécifiée : les livraisons doivent simplement avoir lieu après les collectes correspondantes.
LAST_IN_FIRST_OUT Les livraisons doivent avoir lieu dans l'ordre inverse des collectes.
FIRST_IN_FIRST_OUT Les livraisons doivent avoir lieu dans le même ordre que les collectes.

LoadLimit

Définit une limite de charge applicable à un véhicule (par exemple, "ce camion ne peut transporter que 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 flexible de la charge. Consultez les costPerUnitAboveSoftMax.

costPerUnitAboveSoftMax

number

Si la charge dépasse softMaxLoad sur le trajet de ce véhicule, la pénalité de coût suivante s'applique (une seule fois par véhicule): (charge - softMaxLoad) * costPerUnitAboveSoftMax. Tous les coûts doivent être additionnés et avoir la même unité que Shipment.penalty_cost.

startLoadInterval

object (Interval)

Intervalle de charge acceptable du véhicule au début du trajet.

endLoadInterval

object (Interval)

Intervalle de charge acceptable du véhicule à la fin du trajet.

maxLoad

string (int64 format)

Charge maximale acceptable.

Intervalle

Intervalle de charges 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 cette valeur n'est pas spécifiée, la charge maximale n'est pas limitée par ce message. 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. Il peut être dur ou mou.

Lorsqu'un champ de limite souple est défini, le seuil de limite souple et le 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 limite la durée à maxDuration.

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)

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

Si elle est définie, softMaxDuration 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)

Limite souple qui n'applique pas de limite de durée maximale, mais qui entraîne un coût proportionnel au carré de la durée en cas de non-respect. Ce coût s'ajoute aux autres coûts définis dans le modèle, avec la même unité.

Si elle est définie, quadraticSoftMaxDuration 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 par heure en cas de dépassement du seuil softMaxDuration. Le coût supplémentaire est nul si la durée est inférieure au seuil. Sinon, il 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 en cas de dépassement du seuil quadraticSoftMaxDuration.

Le coût supplémentaire est nul si la durée est inférieure au seuil. Sinon, il 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 dur ou mou.

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

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

string (int64 format)

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

softMaxMeters

string (int64 format)

Limite souple qui n'applique pas de limite de distance maximale, mais qui, en cas de non-respect, entraîne un coût qui s'ajoute aux autres coûts définis dans le modèle, avec la même unité.

Si défini, softMaxMeters doit être inférieur à maxMeters et ne doit pas être négatif.

costPerKilometerBelowSoftMax

number

Coût par kilomètre, pouvant atteindre softMaxMeters, selon la formule:

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

Ce coût n'est pas accepté dans routeDistanceLimit.

costPerKilometerAboveSoftMax

number

Frais par kilomètre facturés si la distance dépasse la limite de softMaxMeters. Le coût supplémentaire est nul 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, pauses déjeuner). Une pause est une période continue pendant laquelle le véhicule reste inactif à son emplacement actuel et ne peut effectuer aucune visite. Une coupure peut se produire:

  • pendant le trajet entre deux visites (ce qui inclut le temps juste avant ou juste après une visite, mais pas au milieu d'une visite), auquel cas il prolonge le temps de trajet correspondant entre les visites ;
  • ou avant le démarrage du véhicule (le véhicule ne peut pas démarrer au milieu d'une pause), auquel cas il n'a aucune incidence sur l'heure de démarrage du véhicule.
  • ou après la fin du véhicule (idem, avec l'heure de fin du véhicule).
Représentation JSON
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
Champs
breakRequests[]

object (BreakRequest)

Séquence de pauses. Le message BreakRequest s'affiche.

frequencyConstraints[]

object (FrequencyConstraint)

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

BreakRequest

La séquence des pauses (c'est-à-dire leur nombre et leur ordre) qui s'applique à chaque véhicule doit être connue à l'avance. Les BreakRequest répétés définissent cette séquence, dans l'ordre dans lequel elles doivent se produire. Leurs périodes (earliestStartTime / latestStartTime) peuvent se chevaucher, mais elles doivent être compatibles avec la commande (ce point est vérifié).

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

string (Timestamp format)

Obligatoire. Seuil inférieur (inclusif) au début de la pause.

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 (inclusive) du début de la coupure.

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 davantage la fréquence et la durée des pauses spécifiées ci-dessus en appliquant une fréquence minimale de pause, par exemple "Il doit y avoir une pause d'au moins une heure toutes les 12 heures". En supposant que cette règle puisse être interprétée comme "Dans chaque période glissante de 12 heures, il doit y avoir au moins une pause d'au moins une heure", cet exemple se traduirait par la FrequencyConstraint suivante:

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

Le moment et la durée des pauses dans la solution respecteront toutes ces contraintes, en plus des périodes et des durées minimales déjà spécifiées dans le BreakRequest.

En pratique, un FrequencyConstraint peut s'appliquer à des pauses non consécutives. Par exemple, l'exemple suivant respecte l'exemple "1 heure toutes les 12 heures" :

  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. Consultez 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. Plage maximale autorisée pour tout intervalle de temps de l'itinéraire qui n'inclut pas, au moins partiellement, une coupure 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 et d'arrivée des visites et 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

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

Chaque démarrage de véhicule doit correspondre à une seule matrice, c'est-à-dire qu'un seul de ses 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. Il 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 fait référence à des distances dans le modèle, ce champ peut être laissé vide. Sinon, il doit contenir 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 "ET").

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

string

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

Une visite de la source ou un démarrage du véhicule correspondent si et seulement si VisitRequest.tags ou 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 éléments srcTag et excludedSrcTag doit être non vide.

dstTag

string

Une visite de destination ou une fin de trajet correspondent si et seulement si VisitRequest.tags ou Vehicle.end_tags contient dstTag ou ne contient pas excludedDstTag (selon lequel de ces deux champs n'est pas vide).

excludedDstTag

string

Consultez les dstTag. Un seul des éléments dstTag et excludedDstTag doit être non 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'applique en plus de tous les autres coûts existants.

costPerKilometer

number

Indique un coût par kilomètre appliqué à la distance parcourue lors de cette transition. Il s'ajoute à tous les Vehicle.cost_per_kilometer spécifiés sur les véhicules.

distanceLimit

object (DistanceLimit)

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

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

delay

string (Duration format)

Indique un délai induit lors de l'exécution de cette transition.

Ce délai se produit toujours après la fin de la visite 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 leur type d'envoi. L'affichage des envois incompatibles sur le 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 envois ayant un shipment_types différent parmi ceux listés sont "incompatibles".

incompatibilityMode

enum (IncompatibilityMode)

Mode appliqué à l'incompatibilité.

IncompatibilityMode

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

Pour deux envois de types incompatibles avec le mode d'incompatibilité NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY:

  • Si les deux livraisons sont uniquement en retrait (pas de livraisons) ou en livraison (pas de retraits), elles ne peuvent pas partager le même véhicule.
  • Si l'un des envois est une livraison et l'autre une prise en charge, les deux envois peuvent partager le même véhicule si l'envoi précédent est livré avant que l'envoi suivant ne soit pris en charge.

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 d'expédition requis par dependentShipmentTypes.

dependentShipmentTypes[]

string

Pour tous les envois dont le type est indiqué dans le champ dependentShipmentTypes, au moins un envoi de type requiredShipmentTypeAlternatives doit être 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 envois 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, toutes les livraisons "dépendantes" doivent partager le même véhicule qu'au moins l'une de leurs livraisons "obligatoires".
IN_SAME_VEHICLE_AT_PICKUP_TIME

Avec le mode IN_SAME_VEHICLE_AT_PICKUP_TIME, tous les envois "dépendants" doivent comporter au moins un envoi "obligatoire" dans le véhicule au moment de la collecte.

Un retrait d'envoi "dépendant" doit donc avoir:

  • Un envoi "obligatoire" uniquement pour la livraison effectué sur le trajet après :
  • Un envoi "obligatoire" récupéré sur le trajet avant celui-ci. Si l'envoi "obligatoire" est livré, cette livraison doit être effectuée après le retrait de l'envoi "dépendant".
IN_SAME_VEHICLE_AT_DELIVERY_TIME Comme précédemment, sauf que les envois "dépendants" doivent être associés à un envoi "obligatoire" sur le véhicule au moment de la livraison.

PrecedenceRule

Règle de priorité entre deux événements (chaque événement correspond à la collecte ou à la livraison d'un envoi): 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 aux mêmes événements (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 envois sont effectués, et sont ignorées dans le cas contraire.

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

boolean

Indique si l'événement "premier" est une diffusion.

secondIsDelivery

boolean

Indique si l'événement "second" est une diffusion.

offsetDuration

string (Duration format)

Décalage entre le premier et le deuxième événement. Il peut être négatif.

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

firstIndex

integer

Indice d'expédition du premier événement. Ce champ doit être spécifié.

secondIndex

integer

Indice d'expédition de l'événement "second". Ce champ doit être spécifié.