Index
RouteOptimization
(interface)AggregatedMetrics
(message)BatchOptimizeToursMetadata
(message)BatchOptimizeToursRequest
(message)BatchOptimizeToursRequest.AsyncModelConfig
(message)BatchOptimizeToursResponse
(message)BreakRule
(message)BreakRule.BreakRequest
(message)BreakRule.FrequencyConstraint
(message)DataFormat
(enum)DistanceLimit
(message)GcsDestination
(message)GcsSource
(message)InjectedSolutionConstraint
(message)InjectedSolutionConstraint.ConstraintRelaxation
(message)InjectedSolutionConstraint.ConstraintRelaxation.Relaxation
(message)InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.Level
(enum)InputConfig
(message)Location
(message)OptimizeToursRequest
(message)OptimizeToursRequest.SearchMode
(enum)OptimizeToursRequest.SolvingMode
(enum)OptimizeToursResponse
(message)OptimizeToursResponse.Metrics
(message)OptimizeToursValidationError
(message)OptimizeToursValidationError.FieldReference
(message)OutputConfig
(message)Shipment
(message)Shipment.Load
(message)Shipment.VisitRequest
(message)ShipmentModel
(message)ShipmentModel.DurationDistanceMatrix
(message)ShipmentModel.DurationDistanceMatrix.Row
(message)ShipmentModel.PrecedenceRule
(message)ShipmentRoute
(message)ShipmentRoute.Break
(message)ShipmentRoute.EncodedPolyline
(message)ShipmentRoute.Transition
(message)ShipmentRoute.VehicleLoad
(message)ShipmentRoute.Visit
(message)ShipmentTypeIncompatibility
(message)ShipmentTypeIncompatibility.IncompatibilityMode
(enum)ShipmentTypeRequirement
(message)ShipmentTypeRequirement.RequirementMode
(enum)SkippedShipment
(message)SkippedShipment.Reason
(message)SkippedShipment.Reason.Code
(enum)TimeWindow
(message)TransitionAttributes
(message)Vehicle
(message)Vehicle.DurationLimit
(message)Vehicle.LoadLimit
(message)Vehicle.LoadLimit.Interval
(message)Vehicle.TravelMode
(enum)Vehicle.UnloadingPolicy
(enum)Waypoint
(message)
RouteOptimization
Service permettant d'optimiser les visites des véhicules.
Validité de certains types de champs:
google.protobuf.Timestamp
- Les heures sont exprimées en heure Unix: nombre de secondes depuis 1970-01-01T00:00:00+00:00.
- secondes doivent être comprises entre [0, 253402300799], c'est-à-dire entre [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- La valeur nanos ne doit pas être définie ou doit être définie sur 0.
google.protobuf.Duration
- secondes doivent être comprises entre [0, 253402300799], c'est-à-dire entre [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- La valeur nanos ne doit pas être définie ou doit être définie sur 0.
google.type.LatLng
- la latitude doit être de [-90.0, 90.0].
- la longitude doit être de [-180.0, 180.0].
- au moins l'une des valeurs de latitude et de longitude doit être différente de zéro.
BatchOptimizeTours |
---|
Optimise les visites des véhicules pour un ou plusieurs messages Cette méthode est une opération de longue durée (LRO). Les entrées d'optimisation (messages
|
OptimizeTours |
---|
Envoie un Un modèle L'objectif est de fournir une attribution des
|
AggregatedMetrics
Métriques agrégées pour ShipmentRoute
(correspondant à OptimizeToursResponse
pour tous les éléments Transition
et/ou Visit
(correspondant à tous les ShipmentRoute
).
Champs | |
---|---|
performed_shipment_count |
Nombre d'expéditions effectuées. Notez qu'une paire retrait/livraison ne compte qu'une seule fois. |
travel_duration |
Durée totale du trajet pour un itinéraire ou une solution. |
wait_duration |
Temps d'attente total pour un itinéraire ou une solution. |
delay_duration |
Durée totale du retard d'un itinéraire ou d'une solution. |
break_duration |
Durée totale de la coupure pour un itinéraire ou une solution. |
visit_duration |
Durée totale de la visite pour un itinéraire ou une solution. |
total_duration |
La durée totale doit être égale à la somme de toutes les durées ci-dessus. Pour les itinéraires, cela correspond également à:
|
travel_distance_meters |
Distance totale de trajet pour un itinéraire ou une solution. |
max_loads |
Charge maximale atteinte sur l'ensemble de l'itinéraire (solution spécifique), pour chacune des quantités sur cet itinéraire (solution spécifique), calculée comme le maximum dans toutes les |
BatchOptimizeToursMetadata
Ce type ne comporte aucun champ.
Métadonnées d'opération pour les appels BatchOptimizeToursRequest
.
BatchOptimizeToursRequest
Requête d'optimisation par lot des visites en tant qu'opération asynchrone. Chaque fichier d'entrée doit contenir un élément OptimizeToursRequest
, et chaque fichier de sortie contiendra un élément OptimizeToursResponse
. La requête contient des informations permettant de lire/écrire et d'analyser les fichiers. Tous les fichiers d'entrée et de sortie doivent appartenir au même projet.
Champs | |
---|---|
parent |
Obligatoire. Projet et emplacement cibles pour passer un appel. Format: * Si aucun lieu n'est spécifié, une région sera choisie automatiquement. |
model_configs[] |
Obligatoire. Informations d'entrée/de sortie pour chaque modèle d'achat (chemins d'accès aux fichiers et formats de données, par exemple). |
AsyncModelConfig
Informations permettant de résoudre un modèle d'optimisation de manière asynchrone.
Champs | |
---|---|
display_name |
Facultatif. Nom du modèle défini par l'utilisateur, qui peut être utilisé comme alias par l'utilisateur pour suivre les modèles. |
input_config |
Obligatoire. Informations sur le modèle d'entrée. |
output_config |
Obligatoire. Informations sur l'emplacement de sortie souhaité. |
BatchOptimizeToursResponse
Ce type ne comporte aucun champ.
Réponse à un BatchOptimizeToursRequest
. Cette valeur est renvoyée dans l'opération de longue durée une fois l'opération terminée.
BreakRule
Règles permettant de générer des pauses pour un véhicule (par exemple, des pauses déjeuner) Une pause est une période continue au cours de laquelle le véhicule reste inactif à sa position actuelle et ne peut effectuer aucune visite. Une pause peut se produire:
- Au cours du trajet entre deux visites (qui inclut le temps écoulé juste avant ou juste après une visite, mais pas en cours de visite), auquel cas le délai d'acheminement correspondant est prolongé entre les visites.
- ou avant le démarrage du véhicule (il ne doit pas démarrer en plein milieu d'une pause), auquel cas l'heure de début du véhicule n'est pas affectée.
- ou après la fin du véhicule (identifié, avec l'heure de fin du véhicule).
Champs | |
---|---|
break_requests[] |
Séquence de coupures publicitaires. Consultez le message |
frequency_constraints[] |
Des |
BreakRequest
Vous devez connaître au préalable l'ordre des coupures (c'est-à-dire leur numéro et leur ordre) applicable à chaque véhicule. Les BreakRequest
répétées définissent cette séquence, dans l'ordre dans lequel elles doivent apparaître. Leurs périodes (earliest_start_time
/ latest_start_time
) peuvent se chevaucher, mais elles doivent être compatibles avec l'ordre (cette option est cochée).
Champs | |
---|---|
earliest_start_time |
Obligatoire. Limite inférieure (incluse) au début de la coupure publicitaire. |
latest_start_time |
Obligatoire. Limite supérieure (incluse) au début de la coupure publicitaire. |
min_duration |
Obligatoire. Durée minimale de la coupure. Doit être positive. |
FrequencyConstraint
Vous pouvez également limiter la fréquence et la durée des coupures spécifiées ci-dessus, en appliquant une fréquence minimale de coupure publicitaire, telle que "Une pause d'au moins une heure toutes les 12 heures". En supposant que cela puisse être interprété comme "Dans toute fenêtre glissante de 12 heures, il doit y avoir au moins une pause d'au moins une heure", cet exemple se traduirait par le FrequencyConstraint
suivant:
{
min_break_duration { seconds: 3600 } # 1 hour.
max_inter_break_duration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
Le moment et la durée des coupures dans la solution respectent l'ensemble de ces contraintes, en plus des fenêtres temporelles et des durées minimales déjà spécifiées dans BreakRequest
.
Dans la pratique, une clause FrequencyConstraint
peut s'appliquer à des coupures non consécutives. Par exemple, la programmation suivante respecte l'horaire "1h toutes les 12h" Exemple:
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
Champs | |
---|---|
min_break_duration |
Obligatoire. Durée minimale de coupure pour cette contrainte. Non négatif. Voir la description de |
max_inter_break_duration |
Obligatoire. Durée maximale autorisée de tout intervalle de temps de l'itinéraire n'incluant pas au moins partiellement une pause de |
DataFormat
Formats de données pour les fichiers d'entrée et de sortie
Enums | |
---|---|
DATA_FORMAT_UNSPECIFIED |
Valeur non valide. Le format ne doit pas être UNSPECIFIED. |
JSON |
JavaScript Object Notation. |
PROTO_TEXT |
Format de texte Protocol Buffers. Consultez https://protobuf.dev/reference/protobuf/textformat-spec/. |
DistanceLimit
Limite définissant la distance maximale pouvant être parcourue. Elle peut être soit difficile, soit douce.
Si une limite flexible est définie, soft_max_meters
et cost_per_kilometer_above_soft_max
doivent être définis et ne pas être négatifs.
Champs | |
---|---|
max_meters |
Limite stricte qui limite la distance à max_meters au maximum. La limite ne doit pas être négative. |
soft_max_meters |
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 elle est définie, la valeur soft_max_meters doit être inférieure à max_meters et non négative. |
cost_per_kilometer_above_soft_max |
Coût au kilomètre facturé si la distance est supérieure à la limite de
Le coût ne doit pas être négatif. |
GcsDestination
Emplacement Google Cloud Storage dans lequel le ou les fichiers de sortie seront écrits.
Champs | |
---|---|
uri |
Obligatoire. URI Google Cloud Storage. |
GcsSource
Emplacement Google Cloud Storage à partir duquel le fichier d'entrée sera lu.
Champs | |
---|---|
uri |
Obligatoire. URI d'un objet Google Cloud Storage au format |
InjectedSolutionConstraint
Solution injectée dans la requête, y compris des informations sur les visites qui doivent être limitées et sur la manière dont elles doivent l'être.
Champs | |
---|---|
routes[] |
Routes de la solution à injecter. Certaines routes peuvent être omises de la solution d'origine. Les itinéraires et les livraisons ignorées doivent respecter les hypothèses de validité de base listées pour |
skipped_shipments[] |
Envois de la solution à injecter ignorés. Certaines peuvent être omises de la solution d'origine. Consultez le champ |
constraint_relaxations[] |
Pour zéro ou plusieurs groupes de véhicules, indique quand et dans quelle mesure assouplir les contraintes. Si ce champ est vide, tous les itinéraires de véhicules non vides sont entièrement contraints. |
ConstraintRelaxation
Pour un groupe de véhicules, indique à quel seuil les contraintes liées aux visites seront assouplies et à quel niveau. Les livraisons indiquées dans le champ skipped_shipment
ne peuvent pas être ignorées. c'est-à-dire qu'elles ne peuvent pas être effectuées.
Champs | |
---|---|
relaxations[] |
Toutes les assouplissements des contraintes de visite qui s'appliqueront aux visites sur les itinéraires avec des véhicules dans le pays suivant : |
vehicle_indices[] |
Spécifie les index de véhicule auxquels la contrainte de visite Un indice de véhicule est mappé de la même manière que |
Relaxation
Si le champ relaxations
est vide, cela signifie que l'heure de début et la séquence de toutes les visites du routes
sont limitées. Aucune nouvelle visite ne peut donc être insérée ni ajoutée à ces itinéraires. De plus, les heures de début et de fin d'un véhicule en routes
sont entièrement limitées, sauf si le véhicule est vide (c'est-à-dire qu'il n'a pas de visites et que la valeur used_if_route_is_empty
est définie sur "false" dans le modèle).
relaxations(i).level
spécifie le niveau d'assouplissement de la contrainte appliqué à une visite #j qui répond aux critères suivants:
route.visits(j).start_time >= relaxations(i).threshold_time
ETj + 1 >= relaxations(i).threshold_visit_count
De même, le démarrage du véhicule est relâché sur relaxations(i).level
s'il répond aux conditions suivantes:
vehicle_start_time >= relaxations(i).threshold_time
ETrelaxations(i).threshold_visit_count == 0
et l'extrémité du véhicule est relâchée surrelaxations(i).level
si les conditions suivantes sont remplies:vehicle_end_time >= relaxations(i).threshold_time
ETroute.visits_size() + 1 >= relaxations(i).threshold_visit_count
Pour appliquer un niveau d'assouplissement si une visite respecte le threshold_visit_count
OU l'threshold_time
, ajoutez deux relaxations
avec le même level
: l'un avec uniquement threshold_visit_count
défini et l'autre avec seulement threshold_time
défini. Si une visite remplit les conditions de plusieurs relaxations
, le niveau le plus souple s'applique. Par conséquent, entre le début du véhicule et les visites de l'itinéraire jusqu'à la fin du véhicule, le niveau de relaxation devient plus détendu: le niveau de relaxation ne diminue pas à mesure que l'itinéraire progresse.
La durée et la séquence des visites d'itinéraires qui ne satisfont pas aux conditions de seuil d'un relaxations
sont totalement limitées, et aucune visite ne peut être insérée dans ces séquences. De plus, si le début ou la fin d'un véhicule ne remplit pas les conditions d'un assouplissement, la durée est fixe, sauf si le véhicule est vide.
Champs | |
---|---|
level |
Niveau d'assouplissement de la contrainte qui s'applique lorsque les conditions égales ou postérieures à |
threshold_time |
Moment auquel ou après lequel l'assouplissement |
threshold_visit_count |
Nombre de visites avant ou après lequel l'assouplissement Si la valeur est |
Niveau
Exprime les différents niveaux d'assouplissement des contraintes qui sont appliqués à une visite et ceux qui le suivent lorsque les conditions du seuil sont remplies.
L'énumération ci-dessous permet d'effectuer un assouplissement croissant.
Enums | |
---|---|
LEVEL_UNSPECIFIED |
Niveau d'assouplissement implicite par défaut: aucune contrainte n'est assouplie, c'est-à-dire que toutes les visites sont entièrement limitées. Cette valeur ne doit pas être utilisée explicitement dans |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
Les heures de début et de fin des visites sont assouplies, mais chaque visite reste liée au même véhicule, et la séquence des visites doit être respectée: aucune visite ne peut être insérée entre elles ni avant. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Identique à RELAX_VISIT_TIMES_AFTER_THRESHOLD , mais la séquence des visites est également assouplie: les visites restent simplement liées au véhicule. |
RELAX_ALL_AFTER_THRESHOLD |
Identique à RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD , mais le véhicule est également assoupli: les visites sont entièrement sans frais à l'heure seuil ou après, et peuvent potentiellement ne pas être réalisées. |
InputConfig
Spécifiez une entrée pour [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
Champs | |
---|---|
data_format |
Obligatoire. Format des données d'entrée. |
Champ d'union source . Obligatoire. source ne peut être qu'un des éléments suivants : |
|
gcs_source |
Un emplacement Google Cloud Storage. Il doit s'agir d'un objet unique (fichier). |
Lieu
Encapsule un emplacement (un point géographique et un en-tête facultatif).
Champs | |
---|---|
lat_lng |
Coordonnées géographiques du point de cheminement |
heading |
Direction associée au sens du flux de circulation. Cette valeur permet d'indiquer le côté de la route à utiliser pour les lieux de prise en charge et de dépose. Les valeurs d'en-tête peuvent être comprises entre 0 et 360, où 0 correspond à l'orientation vers le nord, 90 à l'est, etc. |
OptimizeToursRequest
Demande à transmettre à un outil de résolution d'optimisation des visites, qui définit le modèle de livraison à résoudre ainsi que les paramètres d'optimisation.
Champs | |
---|---|
parent |
Obligatoire. Projet ou emplacement cible pour passer un appel. Format: * Si aucun lieu n'est spécifié, une région sera choisie automatiquement. |
timeout |
Si ce délai est défini, le serveur renvoie une réponse avant l'expiration du délai ou avant que le délai du serveur pour les requêtes synchrones soit atteint, selon la première échéance atteinte. Pour les requêtes asynchrones, le serveur génère une solution (si possible) avant l'expiration du délai. |
model |
Modèle de livraison à résoudre. |
solving_mode |
Par défaut, le mode de résolution est |
search_mode |
Mode de recherche utilisé pour résoudre la requête. |
injected_first_solution_routes[] |
Guider l'algorithme d'optimisation pour qu'il trouve une première solution semblable à une solution précédente Le modèle est soumis à des contraintes lors de la création de la première solution. Toutes les expéditions qui ne sont pas effectuées sur un itinéraire sont implicitement ignorées dans la première solution, mais peuvent l'être dans des solutions successives. La solution doit satisfaire à quelques hypothèses de validité de base:
Si la solution injectée n'est pas réalisable, une erreur de validation n'est pas nécessairement renvoyée. À la place, une erreur indiquant une irrégularité peut être renvoyée. |
injected_solution_constraint |
Appliquez des contraintes à l'algorithme d'optimisation pour trouver une solution finale semblable à une solution précédente. Par exemple, vous pouvez les utiliser pour figer des portions de routes déjà terminées ou qui doivent l'être, mais qui ne doivent pas être modifiées. Si la solution injectée n'est pas réalisable, une erreur de validation n'est pas nécessairement renvoyée. À la place, une erreur indiquant une irrégularité peut être renvoyée. |
refresh_details_routes[] |
Si ce champ n'est pas renseigné, les itinéraires indiqués sont actualisés, sans modifier la séquence sous-jacente de visites ou de temps de trajet. Seuls les autres détails sont mis à jour. Cela ne résout pas le modèle. Depuis 2020/11, seules les polylignes d'itinéraires non vides sont remplies et Les champs Ce champ ne doit pas être utilisé avec
|
interpret_injected_solutions_using_labels |
Si vrai:
Cette interprétation s'applique aux champs Si la valeur est "true", les étiquettes des catégories suivantes doivent apparaître au maximum une fois dans leur catégorie:
Si un Supprimer des visites ou des itinéraires entiers d'une solution injectée peut avoir un effet sur les contraintes implicites, ce qui peut entraîner un changement de la solution, des erreurs de validation ou une impossibilité. REMARQUE: L'appelant doit s'assurer que chaque |
consider_road_traffic |
Tenir compte de l'estimation du trafic pour calculer les champs |
populate_polylines |
Si la valeur est "true", les polylignes sont renseignées dans les réponses |
populate_transition_polylines |
Si la valeur est "true", les polylignes sont renseignées dans la réponse |
allow_large_deadline_despite_interruption_risk |
Si cet attribut est défini, la requête peut avoir un délai (voir https://grpc.io/blog/deadlines) de 60 minutes maximum. Sinon, le délai maximal n'est que de 30 minutes. Notez que les requêtes de longue durée présentent un risque d'interruption nettement plus important (mais tout de même faible). |
use_geodesic_distances |
Si la valeur est "true", les distances de trajet sont calculées en utilisant les distances géodésiques au lieu des distances Google Maps, et les temps de trajet sont calculés à l'aide de distances géodésiques avec une vitesse définie par |
label |
Libellé pouvant servir à identifier cette demande, signalé dans le |
geodesic_meters_per_second |
Lorsque |
max_validation_errors |
Tronque le nombre d'erreurs de validation renvoyées. Ces erreurs sont généralement associées à une charge utile d'erreur INVALID_ARGUMENT en tant que détails de l'erreur BadRequest (https://cloud.google.com/apis/design/errors#error_details), sauf si resolve_mode=VALIDATE_ONLY: consultez le champ |
SearchMode
Mode définissant le comportement de la recherche, en compromettant la latence et la qualité de la solution. Dans tous les modes, le délai global de requête est appliqué.
Enums | |
---|---|
SEARCH_MODE_UNSPECIFIED |
Mode de recherche non spécifié, équivalent à RETURN_FAST . |
RETURN_FAST |
Arrêtez la recherche après avoir trouvé la première bonne solution. |
CONSUME_ALL_AVAILABLE_TIME |
Consacrer tout le temps disponible à la recherche de meilleures solutions. |
SolvingMode
Définit la manière dont le résolveur doit gérer la requête. Dans tous les modes, sauf VALIDATE_ONLY
, si la requête n'est pas valide, une erreur INVALID_REQUEST
est renvoyée. Consultez max_validation_errors
pour limiter le nombre d'erreurs renvoyées.
Enums | |
---|---|
DEFAULT_SOLVE |
Résolvez le modèle. |
VALIDATE_ONLY |
Ne valide que le modèle sans le résoudre: insère autant de OptimizeToursResponse.validation_errors que possible. |
DETECT_SOME_INFEASIBLE_SHIPMENTS |
Ne renseigne que IMPORTANT: Les livraisons impossibles ne sont pas toutes renvoyées ici, mais seulement celles qui ont été détectées comme impossibles lors du prétraitement. |
OptimizeToursResponse
Réponse après avoir résolu un problème d'optimisation des visites comprenant les itinéraires suivis par chaque véhicule, les livraisons ignorées et le coût global de la solution.
Champs | |
---|---|
routes[] |
Itinéraires calculés pour chaque véhicule le i-ième itinéraire correspond au i-ième véhicule du modèle. |
request_label |
Copie de |
skipped_shipments[] |
Liste de tous les envois ignorés. |
validation_errors[] |
Liste de toutes les erreurs de validation que nous avons pu détecter indépendamment. Reportez-vous à la section "MULTIPLES ERREURS" explication pour le message |
metrics |
Métriques de durée, de distance et d'utilisation pour cette solution. |
Métriques
Métriques globales, agrégées pour toutes les routes.
Champs | |
---|---|
aggregated_route_metrics |
Agrégé sur les routes. Chaque métrique correspond à la somme (ou max, pour les chargements) de tous les champs |
skipped_mandatory_shipment_count |
Nombre de colis obligatoires ignorés. |
used_vehicle_count |
Nombre de véhicules utilisés. Remarque: Si un itinéraire est vide et que |
earliest_vehicle_start_time |
Heure de départ la plus proche pour un véhicule d'occasion, calculée comme le minimum pour l'ensemble des véhicules d'occasion ( |
latest_vehicle_end_time |
Heure de fin la plus tardive pour un véhicule d'occasion, calculée comme le maximum de l'ensemble des véhicules utilisés de |
costs |
Coût de la solution, réparti selon les champs de demande liés aux coûts. Les clés sont des chemins proto correspondant à la requête OptimizeToursRequest d'entrée. Exemple : "model.shipments.pickups.cost", et les valeurs correspondent au coût total généré par le champ de coût correspondant, agrégé pour l'ensemble de la solution. En d'autres termes, la valeur "cost["model.shipments.pickups.cost"] est la somme de tous les coûts de retrait par rapport à la solution. Tous les coûts définis dans le modèle sont indiqués ici en détail, à l'exception des coûts liés aux TransitionAttributes, qui ne sont indiqués que de manière agrégée en date du 1er janvier 2022. |
total_cost |
Coût total de la solution. Somme de toutes les valeurs du mappage des coûts. |
OptimizeToursValidationError
Décrit une erreur rencontrée lors de la validation d'un OptimizeToursRequest
.
Champs | |
---|---|
code |
Une erreur de validation est définie par les paires ( Les autres champs (ci-dessous) fournissent plus de contexte sur l'erreur. MULTIPLE ERRORS (ERREURS MULTIPLES) : lorsqu'il y a plusieurs erreurs, le processus de validation tente d'en générer plusieurs. Tout comme un compilateur, ce processus est imparfait. Certaines erreurs de validation peuvent avoir le statut "fatal", ce qui signifie qu'elles interrompent l'ensemble du processus de validation. C'est notamment le cas pour les erreurs STABILITÉ: REFERENCE: liste de toutes les paires (code, nom) :
|
display_name |
Nom à afficher pour l'erreur. |
fields[] |
Un contexte d'erreur peut impliquer 0, 1 (la plupart du temps) ou plusieurs champs. Par exemple, vous pouvez faire référence au véhicule n° 4 et au premier enlèvement de la livraison n° 2 comme suit:
Notez toutefois que la cardinalité de |
error_message |
Chaîne de texte décrivant l'erreur. Il existe un mappage 1:1 entre STABILITY: non stable: le message d'erreur associé à une |
offending_values |
Peut contenir la ou les valeurs du ou des champs. Cette fonctionnalité n'est pas toujours disponible. Vous ne devez absolument pas vous y fier. Vous ne devez l'utiliser que pour le débogage manuel des modèles. |
FieldReference
Spécifie un contexte pour l'erreur de validation. Un FieldReference
fait toujours référence à un champ donné dans ce fichier et suit la même structure hiérarchique. Par exemple, l'élément 2 de start_time_windows
du véhicule n°5 peut être spécifié comme suit:
name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }
Nous omettez toutefois les entités de niveau supérieur telles que OptimizeToursRequest
ou ShipmentModel
pour éviter d'encombrer le message.
Champs | |
---|---|
name |
Nom du champ (par exemple, "véhicules". |
sub_field |
Sous-champ imbriqué de manière récursive, si nécessaire. |
Champ d'union
|
|
index |
Index du champ s'il est répété. |
key |
Clé si le champ est une carte. |
OutputConfig
Spécifiez une destination pour les résultats [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
Champs | |
---|---|
data_format |
Obligatoire. Format des données de sortie. |
Champ d'union destination . Obligatoire. destination ne peut être qu'un des éléments suivants : |
|
gcs_destination |
Emplacement Google Cloud Storage dans lequel écrire la sortie. |
Livraison
Livraison d'un seul article, de l'un de ses retraits à l'une de ses livraisons. Pour que la livraison soit considérée comme effectuée, un véhicule unique doit se rendre dans l'un de ses points de retrait (et réduire ses capacités de rechange en conséquence), puis se rendre ultérieurement dans l'un de ses sites de livraison (et ainsi augmenter ses capacités de rechange en conséquence).
Champs | |
---|---|
display_name |
Nom à afficher défini par l'utilisateur pour la livraison. Il peut comporter jusqu'à 63 caractères et utiliser des caractères UTF-8. |
pickups[] |
Ensemble d'alternatives de retrait associé à la livraison. S'il n'est pas spécifié, le véhicule n'a besoin de se rendre qu'à un lieu correspondant aux livraisons. |
deliveries[] |
Ensemble d'alternatives de livraison associées à la livraison. Si aucune valeur n'est spécifiée, le véhicule ne doit se rendre qu'à un lieu correspondant aux prises en charge. |
load_demands |
Exigences relatives au chargement de la livraison (par exemple, le poids, le volume, le nombre de palettes, etc.) Les clés de la carte doivent être des identifiants décrivant le type de charge correspondante et, idéalement, incluant également les unités. Par exemple : "weight_kg", "volume_gallons", "pallet_count", etc. Si une clé donnée n'apparaît pas sur la carte, le chargement correspondant est considéré comme nul. |
allowed_vehicle_indices[] |
Ensemble des véhicules susceptibles d'effectuer cette livraison. Si ce champ est vide, tous les véhicules peuvent l'exécuter. Les véhicules sont indiqués en fonction de leur indice dans la liste |
costs_per_vehicle[] |
Indique le coût facturé lorsque la livraison est livrée par chaque véhicule. Si elle est spécifiée, elle doit SOIT:
Ces coûts doivent appartenir à la même unité que |
costs_per_vehicle_indices[] |
Indices des véhicules auxquels |
pickup_to_delivery_absolute_detour_limit |
Spécifie le délai absolu maximal du détour par rapport au trajet le plus court entre le retrait et la livraison. S'il est spécifié, il ne doit pas être négatif, et le colis doit contenir au moins un enlèvement et une livraison. Par exemple, le délai le plus court peut être nécessaire pour passer directement de l'option de retrait choisie directement à l'alternative de livraison choisie. Ensuite, la définition de
Si des limites relatives et absolues sont spécifiées pour une même livraison, la limite la plus contraignante est utilisée pour chaque paire retrait/livraison possible. Depuis 2017/10, les détours ne sont acceptés que lorsque la durée du trajet ne dépend pas du véhicule. |
pickup_to_delivery_time_limit |
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. |
shipment_type |
Chaîne non vide spécifiant un "type" pour cette livraison. Cette fonctionnalité peut être utilisée pour définir des incompatibilités ou des exigences entre Différent de |
label |
Spécifie une étiquette pour ce colis. Cette étiquette est indiquée dans la réponse du |
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 Il est possible d'ignorer une livraison effectuée dans les pays suivants : |
penalty_cost |
Si l'expédition n'est pas finalisée, cette pénalité est ajoutée au coût global des itinéraires. Une expédition est considérée comme terminée si l'une des options de retrait et de livraison proposées est consultée. Le coût peut être exprimé dans la même unité que celle utilisée pour tous les autres champs du modèle relatifs aux coûts. Il doit être positif. IMPORTANT: Si cette pénalité n'est pas spécifiée, elle est considérée comme infinie, c'est-à-dire que l'expédition doit être finalisée. |
pickup_to_delivery_relative_detour_limit |
Spécifie le délai relatif maximal du détour par rapport au trajet le plus court entre la prise en charge et la livraison. S'il est spécifié, il ne doit pas être négatif, et le colis doit contenir au moins un enlèvement et une livraison. Par exemple, le délai le plus court peut être nécessaire pour passer directement de l'option de retrait choisie directement à l'alternative de livraison choisie. Ensuite, la définition de
Si des limites relatives et absolues sont spécifiées pour une même livraison, la limite la plus contraignante est utilisée pour chaque paire retrait/livraison possible. Depuis 2017/10, les détours ne sont acceptés que lorsque la durée du trajet ne dépend pas du véhicule. |
Charger
Lors d'une visite, un montant prédéfini peut être ajouté à la charge du véhicule s'il s'agit d'un enlèvement, ou soustrait s'il s'agit d'une livraison. Ce message définit ce montant. Consultez les load_demands
.
Champs | |
---|---|
amount |
La charge du véhicule effectuant la visite correspondante varie en fonction de l'importance. Étant donné qu'il s'agit d'un nombre entier, nous recommandons aux utilisateurs de choisir une unité appropriée pour éviter toute perte de précision. Doit être ≥ 0. |
VisitRequest
Demande de visite réalisable par un véhicule: elle comporte une géolocalisation (ou deux, voir ci-dessous), les heures d'ouverture et de fermeture représentées par des plages horaires, et la durée du service (temps passé par le véhicule une fois arrivé pour récupérer ou déposer les marchandises).
Champs | |
---|---|
arrival_location |
Géolocalisation à laquelle le véhicule arrive lors de l'exécution de cette |
arrival_waypoint |
Point de cheminement où arrive le véhicule lors de l'exécution de ce |
departure_location |
Géolocalisation où le véhicule part après avoir terminé ce |
departure_waypoint |
Point de cheminement vers lequel le véhicule part après avoir terminé ce |
tags[] |
Spécifie les tags associés à la demande de visite. Les chaînes vides ou en double ne sont pas autorisées. |
time_windows[] |
Fenêtres temporelles qui limitent l'heure d'arrivée à une visite. Notez qu'un véhicule peut partir en dehors de la plage horaire d'arrivée. Autrement dit, l'heure d'arrivée et la durée n'ont pas besoin d'être comprises dans un créneau horaire. Cela peut entraîner un délai d'attente si le véhicule arrive avant L'absence de Les périodes doivent être disjointes, c'est-à-dire qu'aucune période ne doit se chevaucher ni se trouver adjacente, et elles doivent être classées par ordre croissant.
|
duration |
Durée de la visite, c'est-à-dire le temps passé par le véhicule entre l'arrivée et le départ (à ajouter au temps d'attente possible ; voir |
cost |
Coût du service pour cette demande de visite sur un itinéraire en véhicule. Cela permet de payer des frais différents pour chaque retrait ou livraison d'un colis. Ce coût doit être dans la même unité que |
load_demands |
Charger les demandes de cette demande de visite. Ce champ est identique au champ |
visit_types[] |
Spécifie les types de visite. Cela peut permettre d'allouer le temps supplémentaire nécessaire au véhicule pour effectuer cette visite (voir Un type ne peut apparaître qu'une seule fois. |
label |
Spécifie un libellé pour cet élément |
ShipmentModel
Un modèle de livraison contient un ensemble d'expéditions qui doivent être effectuées par un ensemble de véhicules, tout en réduisant le coût global, qui correspond à la somme des éléments suivants:
- le coût de l'itinéraire des véhicules (somme du coût par temps total, coût par temps de trajet et coût fixe pour tous les véhicules)
- des pénalités d'expédition non appliquées.
- le coût de la durée globale des expéditions
Champs | |
---|---|
shipments[] |
Ensemble des expéditions à effectuer dans le modèle. |
vehicles[] |
Ensemble de véhicules pouvant être utilisés pour effectuer des visites. |
global_start_time |
Heures de début et de fin globales du modèle: aucune heure en dehors de cette plage ne peut être considérée comme valide. La période du modèle doit être inférieure à un an, c'est-à-dire que la distance entre les valeurs Lorsque vous utilisez des champs |
global_end_time |
Si cette règle n'est pas configurée, la valeur 00:00:00 UTC, 1er janvier 1971 (soit 31536000 secondes, nanos : 0) est utilisée par défaut. |
global_duration_cost_per_hour |
La "durée globale" du plan global correspond à la différence entre l'heure de début effective au plus tôt et la dernière heure de fin effective de tous les véhicules. Les utilisateurs peuvent, par exemple, attribuer un coût par heure à cette quantité afin d'essayer d'optimiser les jobs pour les terminer au plus tôt. Ce coût doit être dans la même unité que |
duration_distance_matrices[] |
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 :
|
duration_distance_matrix_src_tags[] |
Balises définissant les sources des matrices de durée et de distance. Dans la matrice i, Les balises correspondent à |
duration_distance_matrix_dst_tags[] |
Balises définissant les destinations des matrices de durée et de distance. Les balises correspondent à |
transition_attributes[] |
Attributs de transition ajoutés au modèle. |
shipment_type_incompatibilities[] |
Ensembles de types "shipment_types" incompatibles (voir |
shipment_type_requirements[] |
Ensembles d'exigences |
precedence_rules[] |
Ensemble de règles de priorité à appliquer dans le modèle. |
max_active_vehicles |
Limite le nombre maximal de véhicules actifs. Un véhicule est actif s'il effectue au moins une livraison sur son itinéraire. Cela permet de limiter le nombre d'itinéraires lorsqu'il y a moins de conducteurs que de véhicules et que le parc de véhicules est hétérogène. L'optimisation sélectionnera ensuite le meilleur sous-ensemble de véhicules à utiliser. Doit être strictement positif. |
DurationDistanceMatrix
Spécifie une matrice de durée et de distance entre les lieux de départ des visites et des véhicules à visiter, et les lieux d'arrivée des véhicules.
Champs | |
---|---|
rows[] |
Spécifie les lignes de la matrice de durée et de distance. Elle doit comporter autant d'éléments que |
vehicle_start_tag |
Balise définissant les véhicules auxquels cette matrice de durée et de distance s'applique. Si ce champ est vide, cela s'applique à tous les véhicules, et il ne peut y avoir qu'une seule matrice. Chaque démarrage de véhicule doit correspondre exactement à une matrice. Autrement dit, un seul de leurs champs Toutes les matrices doivent avoir un |
Ligne
Spécifie une ligne de la matrice de durée et de distance.
Champs | |
---|---|
durations[] |
Valeurs de durée pour une ligne donnée. Elle doit comporter autant d'éléments que |
meters[] |
Valeurs de distance pour une ligne donnée. Si aucun coût ni aucune contrainte ne font référence aux distances dans le modèle, vous pouvez laisser ce champ vide. Sinon, il doit comporter autant d'éléments que |
PrecedenceRule
Règle de priorité entre deux événements (chaque événement correspond au retrait ou à la livraison d'une livraison): le "deuxième" l'événement doit commencer au moins offset_duration
après le "premier" a commencé.
Plusieurs priorités peuvent faire référence aux mêmes événements (ou à des événements associés). Par exemple, "Le retrait du point B a lieu après la livraison du point A" et "le retrait de C a lieu après le retrait de B".
De plus, les priorités s'appliquent uniquement lorsque les deux expéditions sont effectuées et sont sinon ignorées.
Champs | |
---|---|
first_is_delivery |
Indique si la "première" est une livraison. |
second_is_delivery |
Indique si la "seconde" est une livraison. |
offset_duration |
Le décalage entre la "première" et "deuxième" . Elle peut être négative. |
first_index |
Indice de livraison du "premier" . Ce champ doit être renseigné. |
second_index |
Indice de livraison du "deuxième" . Ce champ doit être renseigné. |
ShipmentRoute
L'itinéraire d'un véhicule peut être décomposé en fonction de l'axe temporel, comme ceci (nous supposons qu'il y a n visites):
| | | | | T[2], | | |
| Transition | Visit #0 | | | V[2], | | |
| #0 | aka | T[1] | V[1] | ... | V[n-1] | T[n] |
| aka T[0] | V[0] | | | V[n-2],| | |
| | | | | T[n-1] | | |
^ ^ ^ ^ ^ ^ ^ ^
vehicle V[0].start V[0].end V[1]. V[1]. V[n]. V[n]. vehicle
start (arrival) (departure) start end start end end
Notez que nous faisons la différence entre:
- "Événements ponctuels", tels que les heures de début et de fin du véhicule, et les heures de début et de fin de chaque visite (arrivée et départ). Elles se produisent à une seconde donnée.
- "Intervalles de temps", comme les visites elles-mêmes et la transition entre les visites Bien que les intervalles de temps puissent parfois avoir une durée nulle (c'est-à-dire qu'ils commencent et se terminent à la même seconde), ils ont souvent une durée positive.
Règles invariantes :
- S'il y a n visites, il y a n+1 transitions.
- Une visite est toujours entourée d'une transition avant (même index) et d'une transition après (index + 1).
- Le démarrage du véhicule est toujours suivi de la transition n° 0.
- La fin du véhicule est toujours précédée de la transition #n.
Voici ce qui se passe lors d'un Transition
et d'un Visit
:
---+-------------------------------------+-----------------------------+-->
| TRANSITION[i] | VISIT[i] |
| | |
| * TRAVEL: the vehicle moves from | PERFORM the visit: |
| VISIT[i-1].departure_location to | |
| VISIT[i].arrival_location, which | * Spend some time: |
| takes a given travel duration | the "visit duration". |
| and distance | |
| | * Load or unload |
| * BREAKS: the driver may have | some quantities from the |
| breaks (e.g. lunch break). | vehicle: the "demand". |
| | |
| * WAIT: the driver/vehicle does | |
| nothing. This can happen for | |
| many reasons, for example when | |
| the vehicle reaches the next | |
| event's destination before the | |
| start of its time window | |
| | |
| * DELAY: *right before* the next | |
| arrival. E.g. the vehicle and/or | |
| driver spends time unloading. | |
| | |
---+-------------------------------------+-----------------------------+-->
^ ^ ^
V[i-1].end V[i].start V[i].end
Enfin, voici comment les éléments TRAVEL, BREAKS, {8/} et WAIT peuvent être organisés lors d'une transition.
- Ils ne se chevauchent pas.
- Le délai est unique et doit correspondre à une période contiguë juste avant la prochaine visite (ou l'arrivée du véhicule). Il suffit donc de connaître la durée du délai pour connaître ses heures de début et de fin.
- Les BREAKS sont des périodes de temps qui se suivent et ne se chevauchent pas. La réponse spécifie l'heure de début et la durée de chaque coupure.
- TRAVEL et WAIT sont "préemptables" : ils peuvent être interrompus plusieurs fois au cours de cette transition. Les clients peuvent supposer que le voyage a lieu "dès que possible" et que cette "attente" remplit le temps restant.
Exemple (complexe) :
TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
|| | | | | | | ||
|| T | B | T | | B | | D ||
|| r | r | r | W | r | W | e ||
|| a | e | a | a | e | a | l ||
|| v | a | v | i | a | i | a ||
|| e | k | e | t | k | t | y ||
|| l | | l | | | | ||
|| | | | | | | ||
--++-----------------------------------------------------------------++-->
Champs | |
---|---|
vehicle_index |
Véhicule effectuant l'itinéraire, identifié par son indice dans la source |
vehicle_label |
Libellé du véhicule effectuant cet itinéraire (valeur égale à |
vehicle_start_time |
Heure à laquelle le véhicule commence son trajet. |
vehicle_end_time |
Heure à laquelle le véhicule termine son trajet. |
visits[] |
Séquence ordonnée de visites représentant un itinéraire. visites[i] correspond à la i-ième visite de l'itinéraire. Si ce champ est vide, le véhicule est considéré comme non utilisé. |
transitions[] |
Liste numérotée des transitions pour la route. |
has_traffic_infeasibilities |
Lorsque
L'arrivée à next_visit se produira probablement plus tard que la période actuelle, en raison de l'augmentation estimée du temps de trajet |
route_polyline |
Représentation de l'itinéraire sous forme de polyligne encodée. Ce champ n'est renseigné que si |
breaks[] |
Arrêts prévus pour le véhicule effectuant cet itinéraire. La séquence |
metrics |
Métriques de durée, de distance et de charge pour cet itinéraire. Les champs de |
route_costs |
Coût de l'itinéraire, réparti selon les champs de requête liés aux coûts. Les clés sont des chemins proto correspondant à la requête OptimizeToursRequest d'entrée. Exemple : "model.shipments.pickups.cost", et les valeurs correspondent au coût total généré par le champ de coût correspondant, agrégé sur l'ensemble de l'itinéraire. En d'autres termes, la valeur "cost["model.shipments.pickups.cost"] correspond à la somme de tous les coûts de retrait sur l'itinéraire. Tous les coûts définis dans le modèle sont indiqués ici en détail, à l'exception des coûts liés aux TransitionAttributes, qui ne sont indiqués que de manière agrégée en date du 1er janvier 2022. |
route_total_cost |
Coût total de l'itinéraire. Somme de tous les coûts dans la carte des coûts. |
Pause
Données représentant l'exécution d'une coupure.
Champs | |
---|---|
start_time |
Heure de début de la pause. |
duration |
Durée d'une pause. |
EncodedPolyline
Représentation encodée d'une polyligne. Pour en savoir plus sur l'encodage des polylignes, consultez cette page: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.
Champs | |
---|---|
points |
Chaîne représentant les points encodés de la polyligne. |
Transition
Transition entre deux événements sur la route. Consultez la description de ShipmentRoute
.
Si le véhicule n'a pas de start_location
ni de end_location
, les métriques de trajet correspondantes sont égales à 0.
Champs | |
---|---|
travel_duration |
Durée du voyage pendant cette transition. |
travel_distance_meters |
Distance parcourue pendant la transition. |
traffic_info_unavailable |
Lorsque le trafic est demandé via |
delay_duration |
Somme des délais appliqués à cette transition. Le cas échéant, le délai commence exactement |
break_duration |
Durée totale des coupures survenues pendant cette transition, le cas échéant. Les détails concernant l'heure de début et la durée de chaque coupure sont stockés dans |
wait_duration |
Temps d'attente durant cette transition. La durée d'attente correspond au temps d'inactivité et n'inclut pas le temps de pause. Notez également que ce temps d'attente peut être divisé en plusieurs intervalles non contigus. |
total_duration |
Durée totale de la transition, indiquée pour plus de commodité. Elle est égale à:
|
start_time |
Heure de début de cette transition. |
route_polyline |
Représentation polyligne encodée de l'itinéraire suivi pendant la transition. Ce champ n'est renseigné que si |
vehicle_loads |
Les chargements de véhicules au cours de cette transition, pour chaque type qui apparaît dans le Les chargements effectués lors de la première transition sont les chargements de départ de l'itinéraire du véhicule. Ensuite, après chaque visite, les |
VehicleLoad
Indique la charge réelle du véhicule tout au long de l'itinéraire, pour un type donné (voir Transition.vehicle_loads
).
Champs | |
---|---|
amount |
Quantité de charge sur le véhicule pour le type donné. L'unité de charge est généralement indiquée par le type. Consultez les |
Accéder à la page
Visite effectuée sur un itinéraire. Cette visite correspond à la prise en charge ou à la livraison d'un Shipment
.
Champs | |
---|---|
shipment_index |
Index du champ |
is_pickup |
Si la valeur est "true", la visite correspond à la prise en charge d'un |
visit_request_index |
Index de |
start_time |
Heure de début de la visite. Notez qu'il est possible que le véhicule arrive plus tôt au lieu de la visite. Les heures sont cohérentes avec les |
load_demands |
Nombre total de demandes de chargement de visites, calculé comme suit : somme des livraisons et des demandes de visite ( |
detour |
Détour supplémentaire en raison du nombre de cargaisons visitées sur l'itinéraire avant la visite et du temps d'attente potentiel induit par les fenêtres de temps. Si la visite est une livraison, le détour est calculé à partir de la visite de prise en charge correspondante et est égal à:
Sinon, elle est calculée à partir du
|
shipment_label |
Copie du |
visit_label |
Copie du |
ShipmentTypeIncompatibility
Spécifie les incompatibilités entre les envois en fonction de leur type d'envoi. L'apparence des colis incompatibles sur le même itinéraire est limitée en raison du mode d'incompatibilité.
Champs | |
---|---|
types[] |
Liste des types incompatibles. Deux livraisons dont l'attribut |
incompatibility_mode |
Mode appliqué à l'incompatibilité. |
IncompatibilityMode
Modes définissant la façon dont l'apparition des colis incompatibles est limitée sur le même itinéraire.
Enums | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Mode d'incompatibilité non spécifié. Cette valeur ne doit jamais être utilisée. |
NOT_PERFORMED_BY_SAME_VEHICLE |
Dans ce mode, deux envois dont les types sont incompatibles ne peuvent jamais partager le même véhicule. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
Pour deux livraisons dont les types sont incompatibles avec le mode d'incompatibilité
|
ShipmentTypeRequirement
Spécifie les exigences entre les envois en fonction de l'attribut "shipment_type" [type_de_livraison]. Les spécificités de l'exigence sont définies par le mode de l'exigence.
Champs | |
---|---|
required_shipment_type_alternatives[] |
Liste des autres types de livraison requis par le |
dependent_shipment_types[] |
Pour tous les colis dont le type est défini dans le champ REMARQUE: Les chaînes d'exigences telles qu'un |
requirement_mode |
Mode appliqué à l'exigence. |
RequirementMode
Modes définissant l'apparence des colis dépendants sur un itinéraire.
Enums | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Mode d'exigence non spécifié. Cette valeur ne doit jamais être utilisée. |
PERFORMED_BY_SAME_VEHICLE |
Dans ce mode, tous les rôles les livraisons doivent partager le même véhicule qu'au moins un des livraisons. |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
Avec le mode Une entité « dépendante » L'attribut "retrait à la livraison" doit donc être associé à l'un des attributs suivants:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Identiques à l'étape précédente, à l'exception de la variable les livraisons doivent présenter un attribut "obligatoire" sur leur véhicule au moment de la livraison. |
SkippedShipment
Spécifie les détails des envois non effectués dans une solution. Dans les cas exceptionnels et/ou si nous sommes en mesure d'identifier la cause de l'omission, nous signalons la raison ici.
Champs | |
---|---|
index |
L'indice correspond à l'indice de la livraison dans la source |
label |
Copie du |
reasons[] |
Liste des raisons expliquant pourquoi la livraison a été ignorée. Voir le commentaire au-dessus de |
Motif
Si nous pouvons vous expliquer pourquoi la livraison a été ignorée, les motifs seront indiqués ici. Si le motif n'est pas le même pour tous les véhicules, reason
comportera plusieurs éléments. Un colis ignoré ne peut pas avoir de motifs en double (c'est-à-dire lorsque tous les champs sont identiques, à l'exception de example_vehicle_index
). Exemple :
reasons {
code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
example_vehicle_index: 1
example_exceeded_capacity_type: "Apples"
}
reasons {
code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
example_vehicle_index: 3
example_exceeded_capacity_type: "Pears"
}
reasons {
code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
example_vehicle_index: 1
}
L'envoi ignoré est incompatible avec tous les véhicules. Les raisons peuvent être différentes pour tous les véhicules, mais les "Apples" d'au moins un véhicule est dépassée (y compris pour le véhicule 1), la capacité d'au moins un véhicule est dépassée la capacité serait dépassée (véhicule 3 compris) et la limite de distance d'au moins un véhicule serait dépassée (véhicule 1 compris).
Champs | |
---|---|
code |
Reportez-vous aux commentaires de Code. |
example_exceeded_capacity_type |
Si le code de motif est |
example_vehicle_index |
Si le motif est lié à une incompatibilité avec un véhicule de livraison, ce champ fournit l'index d'un véhicule pertinent. |
Code
Code identifiant le type de motif. L'ordonnance n'a aucun sens ici. En particulier, elle n'indique pas si une raison donnée apparaîtra avant une autre dans la solution, si les deux s'appliquent.
Enums | |
---|---|
CODE_UNSPECIFIED |
Elle ne doit jamais être utilisée. Si nous ne comprenons pas pourquoi une livraison a été ignorée, nous renvoyons simplement un ensemble vide de motifs. |
NO_VEHICLE |
Aucun véhicule du modèle ne rend toutes les expéditions impossibles. |
DEMAND_EXCEEDS_VEHICLE_CAPACITY |
La demande de livraison dépasse la capacité d'un véhicule pour certains types de capacité, dont example_exceeded_capacity_type . |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT |
La distance minimale nécessaire pour effectuer cette livraison, c'est-à-dire entre le Notez que pour ce calcul, nous utilisons les distances géodésiques. |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT |
Le temps minimal nécessaire pour effectuer cette livraison, y compris la durée du trajet, le temps d'attente et le temps de maintenance, dépasse la valeur Remarque : dans le meilleur des cas, le temps de trajet est calculé comme suit : distance géodésique x 36 m/s (soit environ 130 km/heure). |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT |
Mêmes données que ci-dessus, mais nous ne comparons que la durée minimale du trajet et le travel_duration_limit du véhicule. |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS |
Le véhicule ne peut pas effectuer cette livraison dans le meilleur des cas (voir CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT pour le calcul du temps) s'il commence à l'heure de départ la plus proche: le temps total mettra fin au véhicule après son heure de fin. |
VEHICLE_NOT_ALLOWED |
Le champ allowed_vehicle_indices du colis n'est pas vide, et ce véhicule n'en fait pas partie. |
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, start_time
et end_time
, appliquent l'heure la plus ancienne et la plus récente de l'événement, par exemple start_time <= event_time <=
end_time
. La limite inférieure de la fenêtre à durée flexible, soft_start_time
, exprime une préférence pour que l'événement se produise à soft_start_time
ou après, en encourant un coût proportionnel au temps écoulé avant l'événement soft_start_time. La limite supérieure de la fenêtre à durée flexible, soft_end_time
, exprime une préférence pour que l'événement se produise à soft_end_time
ou avant, en encourant un coût proportionnel au temps après soft_end_time
où l'événement se produit. start_time
, end_time
, soft_start_time
et soft_end_time
doivent se situer dans les limites de temps globales (voir ShipmentModel.global_start_time
et ShipmentModel.global_end_time
) et doivent respecter:
0 <= `start_time` <= `soft_start_time` <= `end_time` and
0 <= `start_time` <= `soft_end_time` <= `end_time`.
Champs | |
---|---|
start_time |
Heure de début de la période difficile. Si aucune valeur n'est spécifiée, la valeur est |
end_time |
Heure de fin de la période difficile. Si aucune valeur n'est spécifiée, la valeur est |
soft_start_time |
Heure de début en douceur de la fenêtre temporelle. |
soft_end_time |
Heure de fin flexible de la période. |
cost_per_hour_before_soft_start_time |
Un coût par heure ajouté aux autres coûts du modèle si l'événement se produit avant soft_start_time, calculé comme suit:
Ce coût doit être positif, et le champ ne peut être défini que si soft_start_time a été défini. |
cost_per_hour_after_soft_end_time |
Un coût par heure ajouté aux autres coûts du modèle si l'événement se produit après le
Ce coût doit être positif, et le champ ne peut être défini que si |
TransitionAttributes
Spécifie les attributs des transitions entre deux visites consécutives sur un itinéraire. Plusieurs TransitionAttributes
peuvent s'appliquer à la même transition. Dans ce cas, tous les coûts supplémentaires s'additionnent et la contrainte ou la limite la plus stricte s'applique (en suivant la sémantique naturelle "AND").
Champs | |
---|---|
src_tag |
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 |
excluded_src_tag |
Consultez les |
dst_tag |
Une visite à la destination ou un véhicule correspond si sa |
excluded_dst_tag |
Consultez les |
cost |
Spécifie un coût pour effectuer cette transition. Cette valeur est dans la même unité que tous les autres coûts du modèle et ne doit pas être négative. Il s'applique à tous les autres coûts existants. |
cost_per_kilometer |
Spécifie un coût par kilomètre appliqué à la distance parcourue lors de cette transition. Cela correspond à la valeur |
distance_limit |
Spécifie la limite de distance parcourue lors de la transition. Depuis le 6 février 2021, seules les limites souples sont acceptées. |
delay |
Spécifie le délai encouru lors de l'exécution de cette transition. Ce délai survient toujours après la fin de la visite de la source et avant le début de la visite de destination. |
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 start_location
et le end_location
pour ce véhicule. Un itinéraire correspond à une séquence de visites (voir ShipmentRoute
).
Champs | |
---|---|
display_name |
Nom à afficher du véhicule défini par l'utilisateur Il peut comporter jusqu'à 63 caractères et utiliser des caractères UTF-8. |
travel_mode |
Mode de transport qui affecte les routes utilisables par le véhicule et sa vitesse. Voir aussi |
start_location |
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, |
start_waypoint |
Point de cheminement représentant un emplacement géographique où le véhicule part avant d'aller chercher une livraison Si les valeurs |
end_location |
Emplacement géographique où le véhicule s'arrête après avoir terminé son dernier |
end_waypoint |
Point de cheminement représentant un lieu géographique où le véhicule s'arrête une fois son dernier |
start_tags[] |
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. |
end_tags[] |
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. |
start_time_windows[] |
Périodes durant lesquelles le véhicule peut partir de sa position de départ. Ils doivent respecter les limites de temps globales (voir les champs 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.
|
end_time_windows[] |
Périodes durant lesquelles le véhicule peut arriver à sa position d'arrivée. Ils doivent respecter les limites de temps globales (voir les champs 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.
|
unloading_policy |
Règle de déchargement appliquée au véhicule. |
load_limits |
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 |
cost_per_hour |
Coûts du véhicule: tous les coûts s'additionnent et doivent être dans la même unité que Coût par heure de l'itinéraire du véhicule. Ce coût s'applique à la durée totale de l'itinéraire. Il comprend le temps de trajet, le temps d'attente et le temps de visite. L'utilisation de |
cost_per_traveled_hour |
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 |
cost_per_kilometer |
Coût par kilomètre de l'itinéraire du véhicule. Ce coût est appliqué à la distance indiquée dans les |
fixed_cost |
Un coût fixe s'applique si ce véhicule est utilisé pour gérer une livraison. |
used_if_route_is_empty |
Ce champ ne s'applique qu'aux véhicules dont l'itinéraire ne desserve aucune livraison. Elle indique si le véhicule doit être considéré comme d'occasion ou non dans ce cas. Si la valeur est définie sur "true", le véhicule va de son point de départ à son point d'arrivée même s'il ne desserve aucune livraison, et les coûts de temps et de distance liés à son départ --> à la fin du voyage sont pris en compte. Sinon, il ne voyage pas entre son point de départ et sa position d'arrivée, et aucun |
route_duration_limit |
Limite appliquée à la durée totale de l'itinéraire du véhicule. Dans un |
travel_duration_limit |
Limite appliquée à la durée de trajet de l'itinéraire du véhicule. Dans une |
route_distance_limit |
Limite appliquée à la distance totale de l'itinéraire du véhicule. Dans un |
extra_visit_duration_for_visit_type |
Spécifie une correspondance entre les chaînes "visit_types" et les durées. Cette 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. |
break_rule |
Décrit les horaires de pause à appliquer à ce véhicule. Si ce champ est vide, aucun pause ne sera programmé pour ce véhicule. |
label |
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 une livraison est effectuée par un véhicule ignoré dans |
travel_duration_multiple |
Spécifie un facteur multiplicatif pouvant être utilisé pour augmenter ou réduire les temps de trajet de ce véhicule. Par exemple, la valeur 2.0 signifie que le véhicule est plus lent et présente des temps de trajet deux fois supérieurs à ceux des véhicules standards. Ce multiple n'a aucune incidence sur la durée des visites. Cela affecte le coût si 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 |
DurationLimit
Limite définissant la durée maximale de l'itinéraire d'un véhicule. Elle peut être soit difficile, soit douce.
Lorsqu'un champ de limite flexible est défini, le seuil maximal flexible et son coût associé doivent être définis ensemble.
Champs | |
---|---|
max_duration |
Limite stricte qui limite la durée à max_duration au maximum. |
soft_max_duration |
Une limite flexible n'applique pas de limite de durée maximale, mais lorsqu'elle n'est pas respectée, la route entraîne des frais. Ce coût s'ajoute aux autres coûts définis dans le modèle, avec la même unité. Si la valeur |
quadratic_soft_max_duration |
Une limite flexible n'applique pas de limite de durée maximale, mais lorsqu'elle n'est pas respectée, la route entraîne des frais, du point de vue quadratique. Ce coût s'ajoute aux autres coûts définis dans le modèle, avec la même unité. Si la valeur
|
cost_per_hour_after_soft_max |
Coût horaire facturé si le seuil de
Le coût ne doit pas être négatif. |
cost_per_square_hour_after_quadratic_soft_max |
Coût par heure carrée engagé si le seuil de Le coût supplémentaire est égal à 0 si la durée est inférieure au seuil. Sinon, le coût dépend de la durée, comme suit:
Le coût ne doit pas être négatif. |
LoadLimit
Définit une limite de charge qui s'applique à un véhicule (par exemple, "ce camion ne doit pas peser plus de 3 500 kg". Consultez les load_limits
.
Champs | |
---|---|
soft_max_load |
Limite souple de la charge. Consultez les |
cost_per_unit_above_soft_max |
Si la charge dépasse |
start_load_interval |
Intervalle de chargement acceptable du véhicule au début de l'itinéraire. |
end_load_interval |
Intervalle de chargement acceptable pour le véhicule à la fin de l'itinéraire. |
max_load |
Quantité de charge maximale acceptable. |
Intervalle
Intervalle entre des volumes de chargement acceptables.
Champs | |
---|---|
min |
Charge minimale acceptable Doit être ≥ 0. Si les deux sont spécifiés, |
max |
Charge maximale acceptable Doit être ≥ 0. Si elle n'est pas spécifiée, ce message ne limite pas la charge maximale. Si les deux sont spécifiés, |
TravelMode
Modes de transport pouvant être utilisés par les véhicules.
Il doit s'agir d'un sous-ensemble des modes de transport de l'API Routes Preferred de Google Maps Platform. Consultez la page https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
Enums | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
Mode de transport non spécifié, équivalent à DRIVING . |
DRIVING |
Mode de transport correspondant à l'itinéraire (voiture, etc.) |
WALKING |
Mode de transport correspondant à l'itinéraire à pied |
UnloadingPolicy
Règle concernant le déchargement d'un véhicule. S'applique uniquement aux envois avec retrait et livraison.
Les autres expéditions sont sans frais n'importe où sur l'itinéraire, indépendamment de unloading_policy
.
Enums | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
Règle de déchargement non spécifiée. les livraisons doivent avoir lieu juste après leurs retraits correspondants. |
LAST_IN_FIRST_OUT |
Les livraisons doivent être effectuées dans l'ordre inverse des retraits. |
FIRST_IN_FIRST_OUT |
Les livraisons doivent avoir lieu dans la même commande que les retraits |
Repère
Encapsule un point de cheminement. Les points de cheminement marquent les lieux d'arrivée et de départ des demandes de visite, et les lieux de départ et d'arrivée des véhicules.
Champs | |
---|---|
side_of_road |
Facultatif. Indique que l'emplacement de ce point de cheminement doit être prioritaire pour que le véhicule s'arrête à un côté de la route en particulier. Lorsque vous définissez cette valeur, l'itinéraire passe par l'emplacement afin que le véhicule puisse s'arrêter sur le côté de la route vers lequel l'emplacement est orienté à partir du centre. Cette option ne fonctionne pas avec la commande "WALKING" (WALKING). moyen de transport. |
Champ d'union location_type . Différentes manières de représenter un lieu. location_type ne peut être qu'un des éléments suivants : |
|
location |
Point spécifié à l'aide de coordonnées géographiques, y compris un en-tête facultatif. |
place_id |
ID de lieu du POI associé au point de cheminement. |