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 guidées d'un véhicule.
Validité de certains types de champs:
google.protobuf.Timestamp
- Les heures sont exprimées en temps Unix: secondes à partir du 1970-01-01T00:00:00+00:00.
- Les secondes doivent être comprises entre [0, 253402300799], c'est-à-dire dans [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- La valeur nanos doit être désactivée ou définie sur 0.
google.protobuf.Duration
- Les secondes doivent être comprises entre [0, 253402300799], c'est-à-dire dans [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- La valeur nanos doit être désactivée ou définie sur 0.
google.type.LatLng
- La latitude doit être comprise entre [-90,0, 90,0].
- la longitude doit être au format [-180,0, 180,0].
- au moins une latitude et une longitude doit être différente de zéro.
BatchOptimizeTours |
---|
Optimise les visites du véhicule 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 de
|
AggregatedMetrics
Métriques agrégées pour ShipmentRoute
(rép. OptimizeToursResponse
sur tous les éléments Transition
et/ou Visit
, par rapport à tous les éléments ShipmentRoute
).
Champs | |
---|---|
performed_shipment_count |
Nombre d'envois effectués. 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 |
Durée d'attente totale pour un itinéraire ou une solution. |
delay_duration |
Durée totale du retard pour un itinéraire ou une solution. |
break_duration |
Durée totale de la pause 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, il correspond également à:
|
travel_distance_meters |
Distance totale parcourue pour un itinéraire ou une solution. |
max_loads |
Charge maximale atteinte sur l'ensemble de l'itinéraire (solution de la réponse) pour chacune des quantités sur cet itinéraire (solution choisie), calculée comme étant la charge maximale sur l'ensemble des |
BatchOptimizeToursMetadata
Ce type ne comporte aucun champ.
Métadonnées d'opération pour les appels BatchOptimizeToursRequest
.
BatchOptimizeToursRequest
Requête d'optimisation par lots des visites en tant qu'opération asynchrone. Chaque fichier d'entrée doit contenir un élément OptimizeToursRequest
et chaque fichier de sortie doit contenir un élément OptimizeToursResponse
. La requête contient des informations à lire, écrire et analyser les fichiers. Tous les fichiers d'entrée et de sortie doivent se trouver dans le même projet.
Champs | |
---|---|
parent |
Obligatoire. Projet et emplacement cibles pour passer un appel. Format: * Si aucun emplacement n'est spécifié, une région sera choisie automatiquement. |
model_configs[] |
Obligatoire. Informations d'entrée/sortie pour chaque modèle d'achat, telles que les chemins d'accès aux fichiers et les formats de données. |
AsyncModelConfig
Informations permettant de résoudre un modèle d'optimisation de manière asynchrone.
Champs | |
---|---|
display_name |
Facultatif. Nom de modèle défini par l'utilisateur, qui peut être utilisé comme alias par les utilisateurs pour suivre les modèles. |
input_config |
Obligatoire. Informations sur le modèle d'entrée. |
output_config |
Obligatoire. Les informations d'emplacement de sortie souhaitées. |
BatchOptimizeToursResponse
Ce type ne comporte aucun champ.
Réponse à un BatchOptimizeToursRequest
. Il est renvoyé dans l'opération de longue durée une fois l'opération terminée.
BreakRule
Règles pour générer des pauses pour un véhicule (par exemple, des pauses déjeuner) Une pause est une période continue pendant laquelle le véhicule reste inactif à sa position actuelle et ne peut effectuer aucune visite. Une interruption peut se produire:
- pendant le trajet entre deux visites (ce qui inclut le moment qui précède ou suit une visite, mais pas au milieu d'une visite), auquel cas le délai d'acheminement correspondant entre les visites est prolongé ;
- ou avant le démarrage du véhicule (il se peut qu'il ne démarre pas au milieu d'une pause), auquel cas cela n'a aucune incidence sur l'heure de début du véhicule.
- ou après l'arrêt du véhicule (identique à l'heure d'arrivée du véhicule).
Champs | |
---|---|
break_requests[] |
Séquence de pauses. Consultez le message |
frequency_constraints[] |
Plusieurs |
BreakRequest
La séquence de coupures (numéro et ordre) qui s'applique à chaque véhicule doit être connue au préalable. Les éléments BreakRequest
répétés définissent cette séquence, dans l'ordre dans lequel ils doivent se produire. Leurs périodes (earliest_start_time
/ latest_start_time
) peuvent se chevaucher, mais elles doivent être compatibles avec l'ordre (sélectionné).
Champs | |
---|---|
earliest_start_time |
Obligatoire. Limite inférieure (incluse) au début de la coupure. |
latest_start_time |
Obligatoire. Limite supérieure (incluse) au début de la coupure. |
min_duration |
Obligatoire. Durée minimale de la coupure. Doit être positive. |
FrequencyConstraint
Vous pouvez restreindre davantage la fréquence et la durée des pauses spécifiées ci-dessus en appliquant une fréquence minimale de coupure, telle que "Il doit y avoir une pause d'au moins une heure toutes les 12 heures". En supposant que cela puisse être interprété comme : "Dans une fenêtre à durée flexible de 12 h, il doit y avoir au moins une pause d'au moins une heure", cet exemple se traduit par la valeur FrequencyConstraint
suivante :
{
min_break_duration { seconds: 3600 } # 1 hour.
max_inter_break_duration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
L'heure et la durée des pauses dans la solution respecteront toutes ces contraintes, en plus des fenêtres temporelles et des durées minimales déjà spécifiées dans le BreakRequest
.
En pratique, un FrequencyConstraint
peut s'appliquer aux coupures non consécutives. Par exemple, la planification suivante respecte l'exemple "1 h toutes les 12 h" :
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
Champs | |
---|---|
min_break_duration |
Obligatoire. Durée minimale de la coupure pour cette contrainte. Non négatif. Voir la description de |
max_inter_break_duration |
Obligatoire. Délai maximal autorisé de n'importe quel intervalle de temps de la route qui n'inclut pas au moins une partie d'une interruption de |
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. Il peut être difficile ou doux.
Si une limite flexible est définie, soft_max_meters
et cost_per_kilometer_above_soft_max
doivent être définis tous les deux, et ne pas être négatifs.
Champs | |
---|---|
max_meters |
Une limite stricte limitant la distance à max_meters au maximum. La limite ne doit pas être négative. |
soft_max_meters |
Une limite flexible n'appliquant pas de limite de distance maximale, mais en cas de violation entraîne un coût qui s'ajoute aux autres coûts définis dans le modèle, avec la même unité. Si la valeur de soft_max_meters est définie, elle doit être inférieure à max_meters et ne doit pas être 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 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 demande, y compris des informations sur les visites et la façon dont elles doivent l'être
Champs | |
---|---|
routes[] |
Routes de la solution à injecter Certains itinéraires peuvent être omis de la solution d'origine. Les itinéraires et les livraisons ignorées doivent respecter les hypothèses de validité de base énumérées pour |
skipped_shipments[] |
Envois ignorés de la solution à injecter. Certains peuvent être omis 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 empruntés par des véhicules sont soumis à des contraintes complètes. |
ConstraintRelaxation
Pour un groupe de véhicules, indique à quel niveau les contraintes sur les visites seront assouplies et à quel niveau. Les expéditions indiquées dans le champ skipped_shipment
doivent être ignorées, c'est-à-dire qu'elles ne peuvent pas être effectuées.
Champs | |
---|---|
relaxations[] |
Tous les assouplissements des contraintes de visite qui s'appliqueront aux visites d'itinéraires avec des véhicules dans |
vehicle_indices[] |
Spécifie les indices de véhicules auxquels la contrainte de visite Un index de véhicules est mappé de la même manière que |
Relaxation
Si le champ relaxations
est vide, l'heure de début et l'ordre des visites du routes
sont totalement contraignants, et aucune nouvelle visite ne peut être insérée ni ajoutée à ces itinéraires. De plus, les heures de début et d'arrivée d'un véhicule dans routes
sont totalement limitées, sauf si le véhicule est vide (c'est-à-dire qu'il n'a pas de visite et que le paramètre used_if_route_is_empty
est défini sur "false" dans le modèle).
relaxations(i).level
spécifie le niveau d'assouplissement de la contrainte appliqué à une visite #j qui satisfait aux conditions suivantes:
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 détendu sur relaxations(i).level
si les conditions suivantes sont respectées:
vehicle_start_time >= relaxations(i).threshold_time
ETrelaxations(i).threshold_visit_count == 0
et l'extrémité du véhicule est flexible surrelaxations(i).level
si les conditions suivantes sont respectées: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 répond aux threshold_visit_count
OU les threshold_time
, ajoutez deux relaxations
avec le même level
: l'un avec seulement 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. Ainsi, entre le départ du véhicule et l'arrêt 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 chronologie et la séquence des visites d'itinéraire qui ne remplissent pas les conditions de seuil des relaxations
sont totalement soumises à des contraintes, et aucune visite ne peut être insérée dans ces séquences. De plus, si le départ ou la fin d'un véhicule ne remplit pas les conditions d'un assouplissement, l'heure 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 supérieures à |
threshold_time |
Heure à laquelle l'assouplissement |
threshold_visit_count |
Nombre de visites après lesquelles l'assouplissement Si elle est définie sur |
Niveau
Exprime les différents niveaux d'assouplissement des contraintes, qui sont appliqués pour une visite et ceux qui suivent lorsque les conditions de seuil sont remplies.
L'énumération ci-dessous permet d'augmenter la relaxation.
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 soumises à des contraintes. Cette valeur ne doit pas être utilisée explicitement dans |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
Les heures de début des visites et les heures de début/fin du véhicule seront 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 ou avant. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Identique à RELAX_VISIT_TIMES_AFTER_THRESHOLD , mais la séquence des visites est également souple: 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 à un certain moment après le seuil défini, et elles peuvent ne pas être effectué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). |
Emplacement
Encapsule un emplacement (un point géographique et un titre facultatif).
Champs | |
---|---|
lat_lng |
Coordonnées géographiques du point de cheminement |
heading |
Cap de la boussole associé au sens de la circulation. Cette valeur permet d'indiquer le côté de la route à utiliser pour les montées et les descentes. Les valeurs de cap peuvent aller de 0 à 360, où 0 indique un sens vers le nord, 90 indique un cap suivant l'orientation vers l'est, etc. |
OptimizeToursRequest
Requête à envoyer à un outil 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 emplacement 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 la fin du délai ou avant que le délai du serveur pour les requêtes synchrones ne 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[] |
Guidez l'algorithme d'optimisation pour trouver une première solution semblable à une solution précédente. Le modèle est soumis à des contraintes lorsque la première solution est créée. Les expéditions qui ne sont pas effectuées sur un itinéraire sont implicitement ignorées dans la première solution, mais elles peuvent être effectuées dans des solutions successives. La solution doit répondre à certaines 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 et une erreur indiquant l'infaisabilité peut s'afficher à la place. |
injected_solution_constraint |
Appliquez des contraintes à l'algorithme d'optimisation pour trouver une solution finale semblable à une solution précédente. Vous pouvez, par exemple, figer des parties d'itinéraires déjà terminés ou qui doivent être terminés, mais qui ne doivent pas être modifiés. Si la solution injectée n'est pas réalisable, une erreur de validation n'est pas nécessairement renvoyée et une erreur indiquant l'infaisabilité peut s'afficher à la place. |
refresh_details_routes[] |
S'il n'est pas vide, les itinéraires indiqués seront actualisés sans modifier leur séquence de visites ni leur temps de trajet sous-jacent: seuls les autres détails seront mis à jour. Cela ne résout pas le problème. Depuis 2020/11, seules les polylignes des itinéraires non vides sont insérées. La valeur Les champs Ce champ ne doit pas être utilisé avec
|
interpret_injected_solutions_using_labels |
Si la valeur est "true" :
Cette interprétation s'applique aux champs Si la valeur est "true", les libellés des catégories suivantes doivent apparaître au maximum une fois dans leur catégorie:
Si un Supprimer des itinéraires 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 solution, des erreurs de validation ou une infaisabilité. REMARQUE: L'appelant doit s'assurer que chaque |
consider_road_traffic |
Prenez en compte l'estimation du trafic pour calculer les champs |
populate_polylines |
Si la valeur est "true", les polylignes sont renseignées dans les |
populate_transition_polylines |
Si la valeur est "true", les polylignes sont renseignées dans la réponse |
allow_large_deadline_despite_interruption_risk |
Si cette option est définie, la requête peut avoir un délai maximal de 60 minutes (voir https://grpc.io/blog/deadlines). 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 élevé (mais tout de même faible). |
use_geodesic_distances |
Si la valeur est "true", les distances des trajets seront calculées à l'aide des distances géodésiques et non de celles de Google Maps, et les temps de trajet seront calculés à l'aide des distances géodésiques avec une vitesse définie par |
label |
Libellé pouvant être utilisé pour identifier cette demande, indiqué 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étail de l'erreur BadRequest (https://cloud.google.com/apis/design/errors#error_details), sauf si la résolution du problème est la suivante : VALIDATE_ONLY : consultez le champ |
SearchMode
Mode définissant le comportement de la recherche, en compromettant la latence par rapport à la qualité de la solution. Dans tous les modes, le délai global des requêtes 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 solution adaptée. |
CONSUME_ALL_AVAILABLE_TIME |
Consacrez 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, à l'exception de VALIDATE_ONLY
, si la requête n'est pas valide, une erreur INVALID_REQUEST
s'affiche. Consultez la section max_validation_errors
pour limiter le nombre d'erreurs renvoyées.
Enums | |
---|---|
DEFAULT_SOLVE |
Résoudre le modèle |
VALIDATE_ONLY |
Valide uniquement le modèle sans le résoudre: insère autant de OptimizeToursResponse.validation_errors que possible. |
DETECT_SOME_INFEASIBLE_SHIPMENTS |
Ne renseigne que IMPORTANT: Tous les envois non réalisables ne sont pas renvoyés ici, mais uniquement ceux qui ont été identifiés comme irréalisables lors du prétraitement. |
OptimizeToursResponse
Réponse après avoir résolu un problème d'optimisation des visites, contenant les itinéraires suivis par chaque véhicule, les envois ignorés 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 toutes les expéditions ignorées. |
validation_errors[] |
Liste de toutes les erreurs de validation que nous avons pu détecter indépendamment. Consultez l'explication "PLUSIEURS ERREURS" pour le message |
metrics |
Durée, distance et métriques d'utilisation de cette solution. |
Métriques
Métriques globales, agrégées pour toutes les routes.
Champs | |
---|---|
aggregated_route_metrics |
Agrégation des routes. Chaque métrique correspond à la somme (ou maximale, pour les chargements) de tous les champs |
skipped_mandatory_shipment_count |
Nombre d'envois obligatoires ignorés. |
used_vehicle_count |
Nombre de véhicules utilisés. Remarque: Si l'itinéraire d'un véhicule est vide et que |
earliest_vehicle_start_time |
Heure de départ au plus tôt d'un véhicule d'occasion, calculée comme le minimum pour tous les véhicules d'occasion ( |
latest_vehicle_end_time |
Heure de fin la plus tardive d'un véhicule d'occasion, calculée comme étant le maximum pour tous les véhicules d'occasion de |
costs |
Coût de la solution, ventilé par champs de requête liés au coût. Les clés sont des chemins proto par rapport à la requête OptimizeToursRequest d'entrée (par exemple, "model.shipments.pickups.cost"). 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, les coûts["model.shipments.pickups.cost"] correspondent à la somme de tous les coûts de retrait dans la solution. Tous les coûts définis dans le modèle sont présentés en détail ici, à 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 plan 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 la paire ( D'autres champs (ci-dessous) fournissent plus de contexte sur l'erreur. PLUSIEURS ERREURS: lorsqu'il existe plusieurs erreurs, le processus de validation tente d'en afficher plusieurs. Tout comme un compilateur, il s'agit d'un processus imparfait. Certaines erreurs de validation sont "fatales" et interrompent l'ensemble du processus de validation. C'est le cas des erreurs STABILITÉ: REFERENCE: liste de toutes les paires (code, nom) :
|
display_name |
Nom à afficher de l'erreur. |
fields[] |
Un contexte d'erreur peut impliquer 0, 1 (la plupart du temps) ou plusieurs champs. Par exemple, pour faire référence au véhicule n° 4 et au premier enlèvement du colis n° 2, procédez comme suit:
Notez toutefois que la cardinalité de |
error_message |
Chaîne de texte décrivant l'erreur. Il existe une correspondance 1:1 entre STABILITÉ: non stable: le message d'erreur associé à un |
offending_values |
Peut contenir la ou les valeurs des champs. Cette option n'est pas toujours disponible. Vous ne devez absolument pas vous y fier et ne 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, nous pouvons spécifier l'élément n° 2 du fichier start_time_windows
pour le véhicule n° 5 comme suit:
name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }
Toutefois, nous ignorons 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
L'expédition d'un seul article, d'un de ses retraits à l'une de ses livraisons. Pour que la livraison soit considérée comme effectuée, un véhicule unique doit se rendre dans l'un de ses points de retrait (et réduire ses capacités de réserve en conséquence), puis se rendre ultérieurement dans l'un de ses points de livraison (et donc augmenter à nouveau ses capacités de réserve en conséquence).
Champs | |
---|---|
display_name |
Nom à afficher défini par l'utilisateur pour le colis. Il peut comporter jusqu'à 63 caractères et utiliser des caractères UTF-8. |
pickups[] |
Ensemble des alternatives de retrait associées à la livraison. S'il n'est pas spécifié, le véhicule ne doit se rendre qu'à un lieu correspondant aux livraisons. |
deliveries[] |
Ensemble des alternatives de livraison associées à l'expédition. S'il n'est pas spécifié, il suffit que le véhicule se rende dans un lieu correspondant aux prises en charge. |
load_demands |
Charges requises pour le colis (par exemple, le poids, le volume, le nombre de palettes, etc.) Les clés du mappage doivent être des identifiants décrivant le type de charge correspondante, idéalement en incluant les unités. Par exemple: "weight_kg", "volume_gallons", "pallet_count", etc. Si une clé donnée n'apparaît pas sur la carte, la charge correspondante est considérée comme nulle. |
allowed_vehicle_indices[] |
Ensemble des véhicules pouvant effectuer cette expédition. Si ce champ est vide, tous les véhicules peuvent l'utiliser. Les véhicules sont indiqués par leur indice dans la liste |
costs_per_vehicle[] |
Indique les frais à payer lorsque cette livraison est effectuée par chaque véhicule. S'il est spécifié, il doit contenir SOIT:
Ces coûts doivent être exprimés dans la même unité que le |
costs_per_vehicle_indices[] |
Intervalles des véhicules auxquels s'applique |
pickup_to_delivery_absolute_detour_limit |
Spécifie le délai absolu maximal de déviation par rapport au chemin le plus court entre le retrait et la livraison. Si cet attribut est spécifié, il ne doit pas être négatif, et le colis doit inclure au moins les options de retrait et de livraison. Par exemple, indiquez le délai le plus court pour passer directement de l'alternative de retrait choisie directement à l'alternative de livraison choisie. Ensuite, la définition de
Si des limites relatives et absolues sont spécifiées pour une même livraison, la limite la plus contraignante est utilisée pour chaque paire de retrait/livraison possible. Depuis 2017/2010, les déviations ne sont autorisées que lorsque la durée du trajet ne dépend pas des véhicules. |
pickup_to_delivery_time_limit |
Spécifie la durée maximale entre le début du retrait et le début de la livraison d'une livraison. Si cet attribut est spécifié, il ne doit pas être négatif, et le colis doit inclure au moins les options de retrait et de livraison. Cela ne dépend pas des alternatives sélectionnées pour la collecte et la livraison, ni de la vitesse du véhicule. Cette valeur peut être spécifiée en même temps que les contraintes de déviation maximales: la solution respectera ces deux spécifications. |
shipment_type |
Chaîne non vide indiquant un "type" pour cette livraison. Cette fonctionnalité permet de définir des incompatibilités ou des exigences entre Différent de |
label |
Spécifie une étiquette pour cette livraison. Ce libellé est signalé dans la réponse dans l'élément |
ignore |
Si la valeur est "true", ignorez cette livraison, mais n'appliquez pas de Le fait d'ignorer une livraison entraîne une erreur de validation lorsque le modèle contient des Vous pouvez ignorer une expédition effectuée dans les pays suivants : |
penalty_cost |
Si l'expédition n'est pas effectuée, cette pénalité est ajoutée au coût global des itinéraires. Une expédition est considérée comme terminée si l'une de ses alternatives de retrait et de livraison est utilisée. Le coût peut être exprimé dans la même unité que celle utilisée pour tous les autres champs du modèle relatifs au coût. La valeur doit être positive. IMPORTANT: Si cette pénalité n'est pas spécifiée, elle est considérée comme illimitée, ce qui signifie que l'envoi doit être effectué. |
pickup_to_delivery_relative_detour_limit |
Spécifie le délai de détour maximal relatif par rapport au trajet le plus court entre le retrait et la livraison. Si cet attribut est spécifié, il ne doit pas être négatif, et le colis doit inclure au moins les options de retrait et de livraison. Par exemple, indiquez le délai le plus court pour passer directement de l'alternative de retrait choisie directement à l'alternative de livraison choisie. Ensuite, la définition de
Si des limites relatives et absolues sont spécifiées pour une même livraison, la limite la plus contraignante est utilisée pour chaque paire de retrait/livraison possible. Depuis 2017/2010, les déviations ne sont autorisées que lorsque la durée du trajet ne dépend pas des véhicules. |
Charger
Lors d'une visite, un montant prédéfini peut être ajouté à la charge du véhicule (s'il s'agit d'un retrait) ou soustrait s'il s'agit d'une livraison. Ce message définit le montant en question. Consultez les load_demands
.
Champs | |
---|---|
amount |
Le volume de chargement du véhicule effectuant la visite correspondante varie. Puisqu'il s'agit d'un nombre entier, il est conseillé aux utilisateurs de choisir une unité appropriée afin d'éviter toute perte de précision. Doit être ≥ 0. |
VisitRequest
Demande d'une visite pouvant être effectuée par un véhicule: un véhicule dispose d'une zone géographique (ou deux comme ci-dessous), d'heures d'ouverture et de fermeture représentées par des créneaux horaires, et d'une durée du service (temps passé par le véhicule une fois qu'il est arrivé pour récupérer ou déposer les marchandises).
Champs | |
---|---|
arrival_location |
La géolocalisation à laquelle le véhicule arrive lorsque vous effectuez cette opération |
arrival_waypoint |
Point de cheminement où le véhicule arrive lorsque vous effectuez cette |
departure_location |
Il s'agit de la zone géographique à partir de laquelle le véhicule décolle une fois ce champ |
departure_waypoint |
Point de cheminement où part le véhicule une fois ce point |
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[] |
Périodes qui limitent l'heure d'arrivée à une visite. Notez qu'un véhicule peut partir en dehors de l'heure d'arrivée. Par exemple, il n'est pas nécessaire que l'heure d'arrivée + la durée soient dans une fenêtre horaire. Cela peut entraîner un temps d'attente si le véhicule arrive avant L'absence de Les fenêtres temporelles doivent être disjointes, c'est-à-dire qu'aucune période ne doit se chevaucher ou être adjacente à une autre, et les présenter dans un ordre croissant.
|
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 de traitement de cette demande de visite sur l'itinéraire d'un véhicule. Cela peut être utilisé pour payer des coûts différents pour chaque retrait ou livraison d'un colis. Ce coût doit être exprimé dans la même unité que le |
load_demands |
Charger les demandes de cette demande de visite. Ce champ est identique à |
visit_types[] |
Indique les types de visite. Cela peut être utilisé pour allouer le temps supplémentaire nécessaire à un véhicule pour effectuer cette visite (voir 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 minimisant le coût global, qui correspond à la somme des éléments suivants:
- le coût du calcul d'itinéraire des véhicules (somme des coûts par temps total, coût par temps de trajet et coût fixe pour tous les véhicules) ;
- les pénalités de livraison non effectuées.
- le coût de la durée globale des expéditions ;
Champs | |
---|---|
shipments[] |
Ensemble des livraisons qui doivent être effectuées 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 l'intervalle entre les éléments Si vous utilisez des champs |
global_end_time |
Si cette règle n'est pas configurée, la valeur par défaut est 00:00:00 UTC, le 1er janvier 1971 (secondes: 31536000, nanos: 0). |
global_duration_cost_per_hour |
La "durée globale" du forfait global correspond à la différence entre la date de début effective la plus proche et l'heure de fin effective la plus proche pour tous les véhicules. Les utilisateurs peuvent attribuer un coût par heure à cette quantité pour essayer d'optimiser la tâche le plus tôt possible, par exemple. Ce coût doit être exprimé dans la même unité que le montant en |
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 les 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 ; 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 de livraison non compatibles (voir |
shipment_type_requirements[] |
Ensembles d'exigences pour |
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 si son itinéraire effectue au moins une expédition. Cela permet de limiter le nombre d'itinéraires dans le cas où il y a moins de conducteurs que de véhicules et que le parc de véhicules est hétérogène. L'optimisation sélectionne ensuite le meilleur sous-ensemble de véhicules à utiliser. La valeur doit être strictement positive. |
DurationDistanceMatrix
Spécifie une matrice de durée et de distance entre les lieux de départ des visites et les points de départ des véhicules, jusqu'aux points de départ et d'arrivée des véhicules.
Champs | |
---|---|
rows[] |
Spécifie les lignes de la matrice de durée et de distance. Il doit comporter autant d'éléments que |
vehicle_start_tag |
Balise définissant les véhicules auxquels s'applique cette matrice de durée et de distance. Si ce champ est vide, il s'applique à tous les véhicules, et il ne peut y avoir qu'une seule matrice. Chaque départ de véhicule doit correspondre exactement à une matrice, c'est-à-dire qu'un seul des champs Toutes les matrices doivent avoir un |
Row
Spécifie une ligne de la matrice de durée et de distance.
Champs | |
---|---|
durations[] |
Valeurs de durée pour une ligne donnée. Il doit comporter autant d'éléments que |
meters[] |
Valeurs de distance pour une ligne donnée. Si aucun coût ou aucune contrainte ne fait référence à des distances dans le modèle, ce champ peut être laissé vide. Dans le cas contraire, il doit comporter autant d'éléments que |
PrecedenceRule
Règle de priorité entre deux événements (chaque événement étant le retrait ou la livraison d'un colis): le "deuxième" événement doit commencer au moins offset_duration
après le début du "premier".
Plusieurs priorités peuvent faire référence au même événement (ou à des événements associés). Par exemple, "Le retrait de B a lieu après la livraison de A" et "le retrait de C a lieu après le retrait de B".
De plus, les priorités ne s'appliquent que lorsque les deux expéditions sont effectuées et sont sinon ignorées.
Champs | |
---|---|
first_is_delivery |
Indique si le "premier" événement est une diffusion. |
second_is_delivery |
Indique si le "deuxième" événement est une diffusion. |
offset_duration |
Décalage entre le "premier" et le "deuxième" événement. Elle peut être négative. |
first_index |
Index des livraisons du "premier" événement. Ce champ doit être renseigné. |
second_index |
Index des livraisons du "deuxième" événement. Ce champ doit être renseigné. |
ShipmentRoute
L'itinéraire d'un véhicule peut être décomposé le long 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 une différence entre:
- les "événements ponctuels", tels que le début et la fin du véhicule, ou le début et la fin de chaque visite (c'est-à-dire l'arrivée et le départ). Elles se produisent à une seconde donnée.
- "intervalles de temps", par exemple, 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 elle (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.
- L'extrémité du véhicule est toujours précédée de la transition #n.
En zoomant, voici ce qui se passe pendant une Transition
et une 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 définir les paramètres VOYAGE, PAUSES, DÉLAI et ATTENTE lors d'une transition.
- Ils ne se chevauchent pas.
- Le délai de réponse (DELAY) est unique et doit être une période contiguë avant la prochaine visite (ou la fin du véhicule). Il suffit donc de connaître la durée du retard pour connaître ses heures de début et de fin.
- Les BREAKS sont des périodes de temps contiguës qui ne se chevauchent pas. La réponse spécifie l'heure de début et la durée de chaque coupure.
- Les délais de VOYAGE et d'ATTENTE sont "préemptables": ils peuvent être interrompus plusieurs fois au cours de cette transition. Les clients peuvent supposer que le trajet se déroule "dès que possible" et que l'attente occupe 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 |
Étiquette du véhicule effectuant cet itinéraire, égal à |
vehicle_start_time |
Heure à laquelle le véhicule commence son itinéraire. |
vehicle_end_time |
Heure à laquelle le véhicule termine son trajet. |
visits[] |
Séquence de visites ordonnée représentant un itinéraire. "Visits[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 de la route. |
has_traffic_infeasibilities |
Lorsque
L'arrivée à "next_visit" aura probablement lieu plus tard que son créneau horaire actuel, en raison de l'estimation accrue 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 planifiés pour le véhicule effectuant cet itinéraire. La séquence |
metrics |
Métriques de durée, de distance et de chargement pour cet itinéraire. Les champs de |
route_costs |
Coût de l'itinéraire, ventilé par champs de requête liés au coût. Les clés sont des chemins proto par rapport à la requête OptimizeToursRequest d'entrée (par exemple, "model.shipments.pickups.cost"). 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 présentés en détail ici, à 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 sur le plan des coûts. |
Pause
Données représentant l'exécution d'une pause.
Champs | |
---|---|
start_time |
Heure de début d'une 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 la 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
et/ou de end_location
, les métriques de trajet correspondantes sont de 0.
Champs | |
---|---|
travel_duration |
Durée du trajet pendant cette transition. |
travel_distance_meters |
Distance parcourue pendant la transition. |
traffic_info_unavailable |
Lorsque le trafic est demandé via |
delay_duration |
Somme des durées de retard appliquées à cette transition. Le cas échéant, le retard commence exactement |
break_duration |
Somme des durées des coupures publicitaires survenant au cours de cette transition, le cas échéant. Les informations sur l'heure de début et la durée de chaque coupure sont stockées dans |
wait_duration |
Temps d'attente au cours de 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, fournie à titre indicatif. Elle est égale à:
|
start_time |
Heure de début de cette transition. |
route_polyline |
Représentation en polyligne encodée de l'itinéraire suivi pendant la transition. Ce champ n'est renseigné que si |
vehicle_loads |
Chargements de véhicules pendant cette transition, pour chaque type qui apparaît dans le Les charges de la première transition correspondent aux charges de départ de l'itinéraire du véhicule. Ensuite, après chaque visite, les |
VehicleLoad
Indique le chargement réel du véhicule à un moment donné de l'itinéraire, pour un type donné (voir Transition.vehicle_loads
).
Champs | |
---|---|
amount |
Charge du 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 au cours d'un itinéraire. Cette visite correspond à la collecte ou à la livraison d'un Shipment
.
Champs | |
---|---|
shipment_index |
Index du champ |
is_pickup |
Si la valeur est "true", la visite correspond à une prise en charge d'un |
visit_request_index |
Index de |
start_time |
Heure à laquelle la visite commence. Notez que le véhicule peut arriver plus tôt au lieu de la visite. Les heures correspondent aux |
load_demands |
Demande totale de chargement de visites, calculée en additionnant les valeurs de la livraison et des demandes de visite |
detour |
Délai de déviation supplémentaire en raison des expéditions visitées sur l'itinéraire avant la visite et du temps d'attente potentiel induits par les créneaux horaires. S'il s'agit d'une livraison, le détour est calculé à partir de la visite de retrait 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 expéditions en fonction de leur type de livraison. L'affichage d'expéditions incompatibles sur un même itinéraire est limité en fonction 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 l'apparence d'expéditions incompatibles sur un même itinéraire
Enums | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Mode d'incompatibilité non spécifié. Cette valeur ne doit jamais être utilisée. |
NOT_PERFORMED_BY_SAME_VEHICLE |
Dans ce mode, deux envois dont le type est incompatible ne peuvent jamais partager le même véhicule. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
Pour deux livraisons dont les types ne sont pas compatibles avec le mode d'incompatibilité
|
ShipmentTypeRequirement
Spécifie les exigences entre les expéditions en fonction de leur type d'expédition. Les spécificités de l'exigence sont définies par le mode d'exigence.
Champs | |
---|---|
required_shipment_type_alternatives[] |
Liste des autres types de livraison requis par le |
dependent_shipment_types[] |
Toutes les livraisons dont le type est indiqué dans le champ REMARQUE: Les chaînes d'exigences telles que |
requirement_mode |
Mode appliqué à l'exigence. |
RequirementMode
Modes définissant l'apparence des livraisons dépendantes sur un itinéraire.
Enums | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Mode d'exigence non spécifié. Cette valeur ne doit jamais être utilisée. |
PERFORMED_BY_SAME_VEHICLE |
Dans ce mode, tous les envois "dépendants" doivent partager le même véhicule qu'au moins l'un des envois "obligatoires". |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
Avec le mode Un retrait d'un colis "dépendant" doit donc avoir l'une des valeurs suivantes:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Identique à la procédure précédente, à la différence que les livraisons "dépendantes" doivent être associées à une livraison "obligatoire" dans le véhicule au moment de la livraison. |
SkippedShipment
Spécifie les détails des envois non effectués dans une solution. Pour les cas banals et/ou si nous pouvons identifier la cause du saut de page, nous l'indiquons ici.
Champs | |
---|---|
index |
L'index correspond à l'index de la livraison dans la source |
label |
Copie du |
reasons[] |
Liste des raisons expliquant pourquoi l'envoi a été ignoré. Voir le commentaire au-dessus de |
Motif
Si nous pouvons expliquer pourquoi la livraison a été ignorée, les raisons sont indiquées ici. Si le motif n'est pas le même pour tous les véhicules, reason
comportera plusieurs éléments. Un envoi ignoré ne peut pas avoir plusieurs raisons, c'est-à-dire que 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
}
La livraison ignorée est incompatible avec tous les véhicules. Les raisons peuvent être différentes pour tous les véhicules, mais au moins la capacité "Apples " d'un véhicule (y compris le véhicule 1) est dépassée, la capacité "Pears " d'au moins un véhicule (y compris le véhicule 3) et la distance maximale d'au moins un véhicule (y compris le véhicule 1).
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é entre le véhicule d'expédition et le véhicule, ce champ indique l'index d'un véhicule concerné. |
Code
Code identifiant le type de motif. Ici, l'ordre n'a aucun sens. En particulier, cela ne donne aucune indication sur la présence d'une raison donnée avant une autre dans la solution, si les deux s'appliquent.
Enums | |
---|---|
CODE_UNSPECIFIED |
Il ne doit jamais être utilisé. Si nous ne parvenons pas à comprendre pourquoi un envoi a été ignoré, nous vous indiquons simplement un ensemble vide de motifs. |
NO_VEHICLE |
Le modèle ne comporte aucun véhicule, ce qui rend toutes les expéditions impossibles. |
DEMAND_EXCEEDS_VEHICLE_CAPACITY |
La demande du colis dépasse la capacité d'un véhicule pour certains types de capacité (example_exceeded_capacity_type ). |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT |
La distance minimale nécessaire pour effectuer cette expédition, 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 expédition (y compris le temps de trajet, le temps d'attente et le temps de service) dépasse les Remarque: Le temps de trajet est calculé dans le meilleur des cas, à savoir une distance géodésique de 36 m/s (environ 130 km/heure). |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT |
Identique à ci-dessus, mais nous ne comparons que la durée de trajet minimale et le travel_duration_limit du véhicule. |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS |
Dans le meilleur des cas, le véhicule ne peut pas effectuer cette expédition (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 indiquerait que le véhicule se terminerait après sa dernière heure d'arrivée. |
VEHICLE_NOT_ALLOWED |
Le champ "allowed_vehicle_indices " du colis n'est pas vide, et ce véhicule ne lui appartient pas. |
TimeWindow
Les fenêtres temporelles limitent l'heure d'un événement, comme l'heure d'arrivée d'une visite, ou les heures de début et d'arrivée d'un véhicule.
Les limites de fenêtre temporelle (start_time
et end_time
) appliquent les dates au plus tôt et au plus tard de l'événement, de sorte que start_time <= event_time <=
end_time
. La limite inférieure de la fenêtre temporelle flexible, soft_start_time
, exprime une préférence pour que l'événement se produise à soft_start_time
ou après en générant un coût proportionnel à la durée avant l'événement soft_start_time. La limite supérieure de la fenêtre temporelle flexible, soft_end_time
, exprime une préférence pour que l'événement se produise au soft_end_time
ou avant en générant un coût proportionnel à la durée 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 fenêtre de temps difficile. Si aucune valeur n'est spécifiée, elle sera définie sur |
end_time |
Heure de fin de la fenêtre de temps difficile. Si aucune valeur n'est spécifiée, elle sera définie sur |
soft_start_time |
Heure de démarrage soft de la fenêtre temporelle. |
soft_end_time |
Heure de fin douce de la fenêtre temporelle. |
cost_per_hour_before_soft_start_time |
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 |
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 (selon la sémantique naturelle "AND").
Champs | |
---|---|
src_tag |
Les balises qui définissent l'ensemble des transitions (src->dst) auxquelles ces attributs s'appliquent. Une visite à la source ou un départ de véhicule correspond si son |
excluded_src_tag |
Consultez les |
dst_tag |
Une visite à la destination ou l'extrémité d'un véhicule correspond si son |
excluded_dst_tag |
Consultez les |
cost |
Indique le coût de cette transition. Cette valeur est exprimée dans la même unité que tous les autres coûts du modèle et ne doit pas être négative. Il s'ajoute à tous les autres coûts existants. |
cost_per_kilometer |
Spécifie un coût au kilomètre appliqué à la distance parcourue lors de la transition. Il s'élève à n'importe quel |
distance_limit |
Spécifie la limite de la distance parcourue lors de cette transition. Depuis 2021/06, seules les limites souples sont acceptées. |
delay |
Spécifie le délai nécessaire lors de l'exécution de cette transition. Ce retard se produit toujours après la fin de la visite de la source et avant le début de la visite de la destination. |
Véhicule
modélise un véhicule lors d'un problème d'expédition ; Si vous résolvez un problème de livraison, un itinéraire commençant par start_location
et se terminant à end_location
sera créé pour ce véhicule. Un itinéraire est 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 commence avant de récupérer les colis. Si aucune valeur n'est spécifiée, le véhicule commence à sa première prise en charge. Si le modèle de livraison comporte des matrices de durée et de distance, |
start_waypoint |
Point de cheminement représentant l'emplacement géographique où le véhicule commence avant de récupérer les colis. Si aucune valeur n'est spécifiée pour |
end_location |
Emplacement géographique où le véhicule se termine après la fin de sa dernière période de |
end_waypoint |
Point de cheminement représentant l'emplacement géographique où le véhicule s'arrête après avoir terminé 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 ajouté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 pendant lesquelles le véhicule peut partir de son lieu 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. Autrement dit, aucune période ne peut se chevaucher ou être adjacente à une autre, et les présenter dans l'ordre chronologique.
|
end_time_windows[] |
Périodes pendant lesquelles le véhicule peut arriver à son point d'arrivée. Ils doivent respecter les limites de temps globales (voir les champs Les fenêtres temporelles appartenant au même champ répété doivent être disjointes. Autrement dit, aucune période ne peut se chevaucher ou être adjacente à une autre, et les présenter dans l'ordre chronologique.
|
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 chargement, conformément aux clés du champ |
cost_per_hour |
Coûts du véhicule: tous les coûts s'additionnent et doivent être exprimés dans la même unité que le Coût à l'heure de l'itinéraire du véhicule. Ce coût s'applique à la durée totale de l'itinéraire. Il comprend le temps de trajet, le temps d'attente et le temps de visite. Utiliser |
cost_per_traveled_hour |
Coût par heure parcourue de l'itinéraire du véhicule. Ce coût n'est appliqué qu'au temps de trajet de l'itinéraire (tel qu'indiqué dans |
cost_per_kilometer |
Coût au kilomètre du trajet du véhicule Ce coût est appliqué à la distance indiquée dans le |
fixed_cost |
Frais fixes appliqués si ce véhicule est utilisé pour le traitement d'un colis. |
used_if_route_is_empty |
Ce champ ne s'applique qu'aux véhicules lorsque leur itinéraire ne dessert aucun envoi. Il indique si le véhicule doit être considéré comme d'occasion ou non. Si la valeur est "true", le véhicule va de son point de départ à sa destination même s'il ne propose aucune livraison. Les coûts liés au temps et à la distance résultant de son trajet de départ --> d'arrivée sont pris en compte. Sinon, il ne se déplacera pas de son point de départ à sa position d'arrivée, et aucun |
route_duration_limit |
Limite appliquée à la durée totale de l'itinéraire du véhicule. Dans une |
travel_duration_limit |
Limite appliquée à la durée du trajet 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 carte allant des chaînes visit_types aux durées. Il s'agit du temps, en plus des 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 sur ce véhicule. Si ce champ est vide, aucune pause ne sera programmée pour ce véhicule. |
label |
Spécifie une étiquette pour ce véhicule. Ce libellé est signalé dans la réponse en tant que |
ignore |
Si la valeur est "true", Si une expédition est effectuée par un véhicule ignoré dans Si une expédition 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 du véhicule. Par exemple, si la valeur est définie sur 2,0, ce véhicule est plus lent et son temps de trajet est deux fois supérieur à celui des véhicules standards. Ce multiple n'a pas d'incidence sur la durée des visites. Cela a une incidence sur le coût si AVERTISSEMENT: Les temps de trajet sont arrondis à la seconde la plus proche après l'application de ce multiple, mais avant d'effectuer des opérations numériques. Par conséquent, un petit multiple peut entraîner une perte de précision. Voir aussi |
DurationLimit
Limite définissant la durée maximale de l'itinéraire d'un véhicule. Il peut être difficile ou doux.
Lorsqu'un champ de limite flexible est défini, le seuil de limite flexible et son coût associé doivent être définis ensemble.
Champs | |
---|---|
max_duration |
Limite stricte limitant la durée à max_duration maximale. |
soft_max_duration |
Une limite flexible n'appliquant pas de limite de durée maximale, mais lorsqu'elle est enfreinte, entraîne un coût pour l'itinéraire. Ces coûts s'ajoutent aux autres coûts définis dans le modèle, avec la même unité. S'il est défini, la valeur |
quadratic_soft_max_duration |
Une limite flexible n'appliquant pas de limite de durée maximale, mais lorsqu'elle est enfreinte, entraîne un coût quadratique de la durée de l'itinéraire. Ces coûts s'ajoutent aux autres coûts définis dans le modèle, avec la même unité. S'il est défini, la valeur
|
cost_per_hour_after_soft_max |
Coût à l'heure encouru en cas de dépassement du seuil
Le coût ne doit pas être négatif. |
cost_per_square_hour_after_quadratic_soft_max |
Coût par heure carrée facturé 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 applicable à un véhicule (par exemple, "ce camion ne peut pas supporter 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 le chargement 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 du véhicule en fin d'itinéraire. |
max_load |
Quantité de charge maximale acceptable. |
Intervalle
Intervalle des quantités de chargement acceptables.
Champs | |
---|---|
min |
Une charge minimale acceptable. Doit être ≥ 0. Si elles sont toutes les deux spécifiées, |
max |
Charge maximale acceptable. Doit être ≥ 0. Si aucune valeur n'est spécifiée, la charge maximale n'est pas limitée par ce message. Si elles sont toutes les deux spécifiées, |
TravelMode
Modes de transport pouvant être utilisés par les véhicules.
Il doit s'agir d'un sous-ensemble des modes de transport privilégiés de l'API Routes de Google Maps Platform (voir https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode).
Enums | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
Mode de transport non spécifié, équivalent à DRIVING . |
DRIVING |
Mode de transport correspondant à l'itinéraire en voiture (voiture, ...). |
WALKING |
Mode de transport correspondant à l'itinéraire à pied |
UnloadingPolicy
Règle sur le déchargement d'un véhicule. S'applique uniquement aux envois avec retrait et livraison.
Les autres livraisons sont sans frais n'importe où sur l'itinéraire, indépendamment de unloading_policy
.
Enums | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
Modalités de déchargement non spécifiées ; les livraisons doivent avoir lieu après le retrait correspondant. |
LAST_IN_FIRST_OUT |
Les livraisons doivent avoir lieu dans l'ordre inverse des retraits |
FIRST_IN_FIRST_OUT |
Les livraisons doivent avoir lieu dans la même commande que les retraits |
Repère
Encapsule un point de cheminement. Les points de cheminement indiquent les lieux d'arrivée et de départ des VisitRequests, ainsi que les lieux de départ et d'arrivée des véhicules.
Champs | |
---|---|
side_of_road |
Facultatif. Indique que l'emplacement de ce point de cheminement doit permettre au véhicule de s'arrêter d'un côté de la route de préférence. Lorsque vous définissez cette valeur, l'itinéraire passe par ce lieu afin que le véhicule puisse s'arrêter au bord de la route où l'emplacement est orienté vers le centre. Cette option ne fonctionne pas pour le mode de transport "WALKING". |
Champ d'union location_type . Différentes manières de représenter un lieu. location_type ne peut être qu'un des éléments suivants : |
|
location |
Point spécifié à l'aide de coordonnées géographiques, y compris un cap facultatif. |
place_id |
ID de lieu du POI associé au point de cheminement. |