- Représentation JSON
- Livraison
- VisitRequest
- LatLng
- Point de cheminement
- Emplacement
- TimeWindow
- Véhicule
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- Intervalle
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- DurationDistanceMatrix
- Ligne
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
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)
- 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 ( |
Champs | |
---|---|
shipments[] |
Ensemble des expéditions à effectuer dans le modèle. |
vehicles[] |
Ensemble de véhicules pouvant être utilisés pour effectuer des visites. |
globalStartTime |
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' Lorsque vous utilisez des champs Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. Exemples : |
globalEndTime |
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 : |
globalDurationCostPerHour |
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, 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 exprimé dans la même unité que |
durationDistanceMatrices[] |
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 Exemples d'utilisation :
|
durationDistanceMatrixSrcTags[] |
Balises définissant les sources des matrices de durée et de distance ; Les balises correspondent à |
durationDistanceMatrixDstTags[] |
Balises définissant les destinations des matrices de durée et de distance : Les balises correspondent à |
transitionAttributes[] |
Attributs de transition ajoutés au modèle. |
shipmentTypeIncompatibilities[] |
Ensembles de types de livraison incompatibles (voir |
shipmentTypeRequirements[] |
Ensembles d'exigences |
precedenceRules[] |
Ensemble de règles de priorité à appliquer dans le modèle. |
maxActiveVehicles |
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. Cela permet de limiter le nombre d'itinéraires lorsque le nombre de conducteurs est inférieur à celui des 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 à 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 ( |
Champs | |
---|---|
displayName |
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[] |
Ensemble d'options de retrait associées à l'envoi. S'il n'est pas spécifié, le véhicule n'a besoin de se rendre qu'à un lieu correspondant aux livraisons. |
deliveries[] |
Ensemble d'alternatives de livraison associées à la livraison. 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 |
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 sur la carte, le chargement correspondant est considéré comme nul. |
allowedVehicleIndices[] |
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 |
costsPerVehicle[] |
Indique le coût facturé lorsque la livraison est livrée par chaque véhicule. S'il est spécifié, il doit avoir l'un des éléments suivants :
Ces coûts doivent être exprimés dans la même unité que |
costsPerVehicleIndices[] |
Indices des véhicules auxquels |
pickupToDeliveryAbsoluteDetourLimit |
Spécifie le délai absolu maximal du détour par rapport au trajet le plus court entre le retrait 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
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 " |
pickupToDeliveryTimeLimit |
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 " |
shipmentType |
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 Différent de |
label |
Indique un libellé pour cette expédition. Ce libellé est indiqué dans la réponse dans le |
ignore |
Si la valeur est "true", ignorez cette livraison, mais n'appliquez pas de Si vous ignorez une livraison, une erreur de validation est générée lorsque le modèle contient des Vous pouvez ignorer une livraison effectuée en |
penaltyCost |
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 la même unité que celle utilisée pour tous les autres champs du modèle relatifs aux coûts. La valeur doit être positive. 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 |
Indique le temps de détour 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, 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
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 ( |
Champs | |
---|---|
arrivalLocation |
Position géographique où le véhicule arrive lors de l'exécution de cette |
arrivalWaypoint |
Point de cheminement où arrive le véhicule lors de l'exécution de cette |
departureLocation |
Position géographique du véhicule à son départ après avoir terminé cette |
departureWaypoint |
Point d'intérêt à partir duquel le véhicule part après avoir terminé cette |
tags[] |
Spécifie les balises associées à la requête de visite. Les chaînes vides ou en double ne sont pas autorisées. |
timeWindows[] |
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 plage horaire d'arrivée. Autrement dit, l'heure d'arrivée et la durée ne doivent pas nécessairement être comprises dans un créneau horaire. Cela peut entraîner un délai d'attente si le véhicule arrive avant L'absence de 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.
|
duration |
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 Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |
cost |
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 |
loadDemands |
Charger les demandes de cette demande de visite. Ce champ est identique au champ |
visitTypes[] |
Spécifie les types de visite. Cela peut être utilisé pour allouer le temps supplémentaire nécessaire à un véhicule pour effectuer cette visite (voir Un type ne peut apparaître qu'une seule fois. |
label |
Spécifie un libellé pour cet élément |
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 |
Latitude en degrés. Elle doit être comprise dans la plage [-90.0, +90.0]. |
longitude |
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, et les lieux de départ et d'arrivée des véhicules.
Représentation JSON |
---|
{ "sideOfRoad": boolean, // Union field |
Champs | |
---|---|
sideOfRoad |
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 la position 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 le mode de transport "WALKING". |
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 |
Point spécifié à l'aide de coordonnées géographiques, y compris d'un angle de visée facultatif. |
placeId |
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 ( |
Champs | |
---|---|
latLng |
Coordonnées géographiques du point de cheminement. |
heading |
Direction indiquée par la boussole associée au sens du trafic. Cette valeur permet d'indiquer le côté de la route à utiliser pour les lieux de montée et de descente libres. Les valeurs de titre peuvent être comprises entre 0 et 360, où 0 correspond à un cap vers le nord, 90 à un cap à l'heure normale de 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 temporelle souple, softEndTime
, indique que l'événement doit se produire à softEndTime
ou avant, en générant un coût proportionnel au temps écoulé après softEndTime
. 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` <= `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 |
Heure de début de la période difficile. Si aucune valeur n'est spécifiée, la valeur est Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. Exemples : |
endTime |
Heure de fin de la période fixe. Si aucune valeur n'est spécifiée, la valeur est Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. Exemples : |
softStartTime |
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 : |
softEndTime |
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 : |
costPerHourBeforeSoftStartTime |
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 :
Ce coût doit être positif, et le champ ne peut être défini que si softStartTime a été défini. |
costPerHourAfterSoftEndTime |
Coût par heure ajouté aux autres coûts du modèle si l'événement se produit après
Ce coût doit être positif, et le champ ne peut être défini que si |
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 ( |
Champs | |
---|---|
displayName |
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 |
Mode de transport qui affecte les routes utilisables par le véhicule et sa vitesse. Voir aussi |
routeModifiers |
Ensemble de conditions à respecter qui affectent la façon dont les itinéraires sont calculés pour le véhicule donné. |
startLocation |
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, |
startWaypoint |
Point de cheminement représentant un emplacement géographique où le véhicule part avant d'aller chercher une livraison Si vous ne spécifiez pas |
endLocation |
Emplacement géographique où le véhicule s'arrête après avoir terminé son dernier |
endWaypoint |
Point de cheminement représentant un emplacement géographique où le véhicule se termine après avoir terminé sa dernière |
startTags[] |
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[] |
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[] |
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 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.
|
endTimeWindows[] |
Périodes pendant lesquelles le véhicule peut arriver à sa destination. Elles doivent respecter les limites de temps globales (voir les champs 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.
|
unloadingPolicy |
Règle de déchargement appliquée au véhicule. |
loadLimits |
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 |
costPerHour |
Coûts du véhicule: tous les coûts s'additionnent et doivent être dans la même unité que Coût par heure du trajet 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 |
costPerTraveledHour |
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 |
costPerKilometer |
Coût par kilomètre du trajet du véhicule. Ce coût est appliqué à la distance indiquée dans le |
fixedCost |
Un coût fixe s'applique si ce véhicule est utilisé pour gérer une livraison. |
usedIfRouteIsEmpty |
Ce champ ne s'applique qu'aux véhicules dont l'itinéraire ne desserve aucune livraison. Il 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 voyage pas entre son point de départ et sa position d'arrivée, et aucun |
routeDurationLimit |
Limite appliquée à la durée totale du trajet du véhicule. Dans un |
travelDurationLimit |
Limite appliquée à la durée du trajet sur l'itinéraire du véhicule. Dans un |
routeDistanceLimit |
Limite appliquée à la distance totale du trajet du véhicule. Dans un |
extraVisitDurationForVisitType |
Spécifie une correspondance entre les chaînes "visitTypes" et les durées. La durée correspond à la durée (en plus de Si une demande de visite comporte plusieurs types, une durée sera ajoutée pour chacun d'eux sur la carte. |
breakRule |
Décrit le calendrier des pauses à appliquer à ce véhicule. Si ce champ est vide, aucun pause ne sera programmé pour ce véhicule. |
label |
Spécifie un libellé pour ce véhicule. Cette étiquette est indiquée dans la réponse en tant que |
ignore |
Si la valeur est "true", Si une livraison est effectuée par un véhicule ignoré dans Si un envoi est effectué par un véhicule ignoré dans |
travelDurationMultiple |
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, le véhicule est plus lent, et ses temps de trajet sont deux fois supérieurs à 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 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 |
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 aux itinéraires routiers (voiture, etc.). |
WALKING |
Mode de transport correspondant aux itinéraires à pied. |
RouteModifiers
Encapsule un ensemble de conditions facultatives à remplir 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 |
Indique s'il faut éviter les routes à péage dans la mesure du raisonnable. La priorité sera donnée aux itinéraires ne comportant pas de routes à péage. S'applique uniquement aux modes de transport motorisés. |
avoidHighways |
Indique si les autoroutes doivent être évitées dans la mesure du possible. Les routes ne comportant pas d'autoroutes seront privilégiées. S'applique uniquement aux modes de transport motorisés. |
avoidFerries |
Spécifie s'il faut éviter les ferries dans la mesure du possible. Les itinéraires ne comportant pas de trajets en ferry seront privilégiés. S'applique uniquement aux modes de transport motorisés. |
avoidIndoor |
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 |
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 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 les retraits correspondants. |
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 la même commande que les retraits |
LoadLimit
Définit une limite de charge applicable à 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 ( |
Champs | |
---|---|
softMaxLoad |
Limite flexible de la charge. Consultez les |
costPerUnitAboveSoftMax |
Si la charge dépasse |
startLoadInterval |
Intervalle de charge acceptable du véhicule au début du trajet. |
endLoadInterval |
Intervalle de chargement acceptable pour le véhicule à la fin de l'itinéraire. |
maxLoad |
Quantité de charge maximale acceptable. |
costPerKilometer |
Coût du déplacement d'une unité de charge de plus d'un kilomètre pour ce véhicule. Elle peut être utilisée comme indicateur de la consommation de carburant: si la charge est un poids (en newtons), alors charge*kilomètre a la dimension d'une énergie. |
costPerTraveledHour |
Frais de déplacement pour ce véhicule avec une unité de charge pendant une heure. |
Intervalle
Intervalle de charges acceptables.
Représentation JSON |
---|
{ "min": string, "max": string } |
Champs | |
---|---|
min |
Charge minimale acceptable Doit être ≥ 0. Si les deux sont spécifiés, |
max |
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, |
LoadCost
Coût de déplacement d'une unité de charge lors d'une Transition
. Pour une charge donnée, le coût correspond à la somme des deux parties:
- min(charge,
loadThreshold
) *costPerUnitBelowThreshold
- max(0, charge -
loadThreshold
) *costPerUnitAboveThreshold
Avec ce coût, les solutions préfèrent répondre d'abord aux demandes élevées ou, de manière équivalente, traiter les demandes élevées en dernier. Par exemple, si un véhicule a
load_limit {
key: "weight"
value {
costPerKilometer {
loadThreshold: 15
costPerUnitBelowThreshold: 2.0
costPerUnitAboveThreshold: 10.0
}
}
}
Elle comporte les étapes suivantes : start,pickup,pickup,delivery,delivery,et comporte les transitions :
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
le coût facturé par ce LoadCost
est calculé comme suit : (cost_below * load_below * kilomètres + coût_above * load_above * kms).
- transition 0: 0.0
- Transition 1 : 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- Transition 2 : 2,0 x 15 x 1,0 + 10,0 x (20 - 15) x 1,0 = 80,0
- Transition 3 : 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transition 4: 0.0
La valeur LoadCost
sur l'itinéraire est donc de 120,0.
Toutefois, si le parcours est "départ, ramassage, livraison, ramassage, livraison, fin" avec des transitions :
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
le coût facturé par ce LoadCost
s'élève à
- transition 0: 0.0
- transition 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transition 2 : 0,0
- Transition 3 : 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transition 4: 0.0
Ici, la valeur LoadCost
sur l'itinéraire est de 40,0.
LoadCost
rend les solutions comportant des transitions lourdes plus chères.
Représentation JSON |
---|
{ "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } |
Champs | |
---|---|
loadThreshold |
Quantité de charge au-delà de laquelle le coût de déplacement d'une unité de charge passe de costPerUnitBelowThreshold à costPerUnitAboveThreshold. Doit être supérieur ou égal à 0. |
costPerUnitBelowThreshold |
Coût de déplacement d'une unité de charge, pour chaque unité comprise entre 0 et le seuil. Doit être une valeur finie et >= 0. |
costPerUnitAboveThreshold |
Coût de déplacement d'une unité de charge, pour chaque unité au-dessus du seuil. Dans le cas particulier où le seuil est défini sur 0, il s'agit d'un coût fixe par unité. Doit être une valeur finie et >= 0. |
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 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 |
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 " |
softMaxDuration |
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 elle est définie, Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |
quadraticSoftMaxDuration |
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, qu'elle est de nature quadratique. 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,
Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |
costPerHourAfterSoftMax |
Coût par heure en cas de dépassement du seuil
Le coût ne doit pas être négatif. |
costPerSquareHourAfterQuadraticSoftMax |
Coût par heure carrée en cas de dépassement du seuil 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 :
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 |
Limite stricte qui limite la distance à maxMeters. La limite ne doit pas être négative. |
softMaxMeters |
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 défini, softMaxMeters doit être inférieur à maxMeters et ne doit pas être négatif. |
costPerKilometerBelowSoftMax |
Coût au kilomètre engagé, qui augmente jusqu'à
Ce coût n'est pas accepté dans |
costPerKilometerAboveSoftMax |
Coût au kilomètre facturé si la distance est supérieure à la limite de
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 à l'arrêt à sa position actuelle 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 (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 ( |
Champs | |
---|---|
breakRequests[] |
Séquence de coupures publicitaires. Consultez le message |
frequencyConstraints[] |
Des |
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 elle doit se produire. 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 |
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 : |
latestStartTime |
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 : |
minDuration |
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 " |
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 calendrier 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, la programmation suivante respecte l'exemple "1 h toutes les 12 h" :
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
Représentation JSON |
---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
Champs | |
---|---|
minBreakDuration |
Obligatoire. Durée minimale de coupure pour cette contrainte. Non négatif. Consultez la description de Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |
maxInterBreakDuration |
Obligatoire. Durée maximale autorisée de tout intervalle de temps de l'itinéraire n'incluant pas au moins partiellement une pause de Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |
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 ( |
Champs | |
---|---|
rows[] |
Spécifie les lignes de la matrice de durée et de distance. Elle doit comporter autant d'éléments que |
vehicleStartTag |
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 à exactement une matrice, c'est-à-dire qu'un seul de ses champs Toutes les matrices doivent avoir un |
Ligne
Spécifie une ligne de la matrice de durée et de distance.
Représentation JSON |
---|
{ "durations": [ string ], "meters": [ number ] } |
Champs | |
---|---|
durations[] |
Valeurs de durée pour une ligne donnée. Il doit comporter autant d'éléments que Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |
meters[] |
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 |
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 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 ( |
Champs | |
---|---|
srcTag |
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 |
excludedSrcTag |
Consultez les |
dstTag |
Une visite de destination ou une fin de trajet du véhicule correspond si et seulement si son |
excludedDstTag |
Consultez les |
cost |
Indique le coût de 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 en plus de tous les autres coûts existants. |
costPerKilometer |
Spécifie un coût par kilomètre appliqué à la distance parcourue lors de cette transition. Il s'ajoute à tous les |
distanceLimit |
Spécifie une limite de distance parcourue lors de cette transition. Depuis juin 2021, seules les limites souples sont acceptées. |
delay |
Spécifie le délai encouru 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 " |
ShipmentTypeIncompatibility
Spécifie les incompatibilités entre les envois en fonction de la valeur "shipmentType". 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 ( |
Champs | |
---|---|
types[] |
Liste des types incompatibles. Deux livraisons dont l'attribut |
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é
|
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 d'exigence.
Représentation JSON |
---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
Champs | |
---|---|
requiredShipmentTypeAlternatives[] |
Liste des autres types de livraison requis par le |
dependentShipmentTypes[] |
Pour tous les envois dont le type est indiqué dans le champ REMARQUE : Les chaînes d'exigences telles qu'un |
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, toutes les expéditions "dépendantes" doivent partager le même véhicule qu'au moins une de leurs expéditions "obligatoires". |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
Avec le mode Un retrait "dépendant" doit donc comporter l'un des éléments suivants:
|
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 au retrait ou à la livraison d'une livraison): 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 du A" et "Le retrait de C a lieu après la livraison 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 |
Indique si l'événement "premier" est une diffusion. |
secondIsDelivery |
Indique si le "second" événement est une diffusion. |
offsetDuration |
Décalage entre le "premier" et le "deuxième" événement. Elle peut être négative. Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |
firstIndex |
Indice d'expédition du premier événement. Ce champ doit être renseigné. |
secondIndex |
Index de livraison du "deuxième" événement. Ce champ doit être spécifié. |