Method: projects.locations.optimizeToursLongRunning

Il s'agit d'une variante de la méthode locations.optimizeTours conçue pour les optimisations avec des valeurs de délai d'expiration élevées. Elle doit être privilégiée par rapport à la méthode locations.optimizeTours pour les optimisations qui prennent plus de quelques minutes.

L'long-running operation (LRO) renvoyée aura un nom au format <parent>/operations/<operation_id> et pourra être utilisée pour suivre la progression du calcul. Le type de champ metadata est OptimizeToursLongRunningMetadata. Le type du champ response est OptimizeToursResponse, si l'opération réussit.

Requête HTTP

POST https://routeoptimization.googleapis.com/v1/{parent=projects/*/locations/*}:optimizeToursLongRunning

L'URL utilise la syntaxe de transcodage gRPC.

Paramètres de chemin d'accès

Paramètres
parent

string

Obligatoire. Projet ou emplacement cibles pour passer un appel.

Format :

  • projects/{project-id}
  • projects/{project-id}/locations/-

Les valeurs {location-id} régionales ne sont pas acceptées.

Corps de la requête

Le corps de la requête contient des données présentant la structure suivante :

Représentation JSON
{
  "timeout": string,
  "model": {
    object (ShipmentModel)
  },
  "solvingMode": enum (SolvingMode),
  "searchMode": enum (SearchMode),
  "injectedFirstSolutionRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "injectedSolutionConstraint": {
    object (InjectedSolutionConstraint)
  },
  "refreshDetailsRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "interpretInjectedSolutionsUsingLabels": boolean,
  "considerRoadTraffic": boolean,
  "populatePolylines": boolean,
  "populateTransitionPolylines": boolean,
  "allowLargeDeadlineDespiteInterruptionRisk": boolean,
  "useGeodesicDistances": boolean,
  "label": string,
  "geodesicMetersPerSecond": number,
  "maxValidationErrors": integer
}
Champs
timeout

string (Duration format)

Si ce délai avant expiration est défini, le serveur renvoie une réponse avant que le délai avant expiration ne soit écoulé ou que le délai avant expiration du serveur pour les requêtes synchrones ne soit atteint, selon la première occurrence.

Pour les requêtes asynchrones, le serveur génère une solution (si possible) avant l'expiration du délai.

model

object (ShipmentModel)

Modèle d'envoi à résoudre.

solvingMode

enum (SolvingMode)

Par défaut, le mode de résolution est DEFAULT_SOLVE (0).

searchMode

enum (SearchMode)

Mode de recherche utilisé pour résoudre la requête.

injectedFirstSolutionRoutes[]

object (ShipmentRoute)

Guider l'algorithme d'optimisation pour trouver une première solution semblable à une solution précédente.

Le modèle est contraint lorsque la première solution est créée. Tous les envois non effectués sur un itinéraire sont implicitement ignorés dans la première solution, mais ils peuvent être effectués dans les solutions successives.

La solution doit satisfaire à certaines hypothèses de validité de base :

  • Pour toutes les routes, vehicleIndex doit être compris dans la plage et ne pas être dupliqué.
  • Pour toutes les visites, shipmentIndex et visitRequestIndex doivent être compris dans la plage.
  • un envoi ne peut être référencé que sur un seul itinéraire.
  • L'enlèvement d'un envoi de type enlèvement-livraison doit être effectué avant la livraison.
  • Une seule alternative de retrait ou de livraison d'un envoi peut être effectuée.
  • pour toutes les routes, les temps augmentent (c'est-à-dire que vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime).
  • un envoi ne peut être effectué que sur un véhicule autorisé. Un véhicule est autorisé si Shipment.allowed_vehicle_indices est vide ou si son vehicleIndex est inclus dans Shipment.allowed_vehicle_indices.

Si la solution injectée n'est pas réalisable, une erreur de validation n'est pas nécessairement renvoyée. Une erreur indiquant l'impossibilité peut être renvoyée à la place.

injectedSolutionConstraint

object (InjectedSolutionConstraint)

Limitez l'algorithme d'optimisation pour trouver une solution finale semblable à une solution précédente. Par exemple, cela peut être utilisé pour figer des parties d'itinéraires qui ont déjà été parcourues 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. Une erreur indiquant l'impossibilité peut être renvoyée à la place.

refreshDetailsRoutes[]

object (ShipmentRoute)

Si ce champ n'est pas vide, les itinéraires indiqués seront actualisés, sans modifier la séquence de visites ou les temps de trajet sous-jacents : seuls les autres détails seront mis à jour. Cela ne résout pas le modèle.

Depuis novembre 2020, cela ne renseigne que les polylignes des itinéraires non vides et nécessite que populatePolylines soit défini sur "true".

Les champs routePolyline des itinéraires transmis peuvent ne pas être cohérents avec l'itinéraire transitions.

Ce champ ne doit pas être utilisé avec injectedFirstSolutionRoutes ou injectedSolutionConstraint.

Shipment.ignore et Vehicle.ignore n'ont aucune incidence sur le comportement. Les polylignes sont toujours renseignées entre toutes les visites de tous les itinéraires non vides, que les envois ou les véhicules associés soient ignorés ou non.

interpretInjectedSolutionsUsingLabels

boolean

Si la réponse est "oui" :

Cette interprétation s'applique aux champs injectedFirstSolutionRoutes, injectedSolutionConstraint et refreshDetailsRoutes. Elle peut être utilisée lorsque les indices d'envoi ou de véhicule de la requête ont changé depuis la création de la solution, par exemple parce que des envois ou des véhicules ont été supprimés de la requête ou ajoutés à celle-ci.

Si la valeur est "true", les libellés des catégories suivantes ne doivent pas apparaître plus d'une fois dans leur catégorie :

Si un vehicleLabel de la solution injectée ne correspond pas à un véhicule de la requête, l'itinéraire correspondant est supprimé de la solution, ainsi que ses visites. Si un shipmentLabel de la solution injectée ne correspond pas à un envoi de la requête, la visite correspondante est supprimée de la solution. Si un SkippedShipment.label de la solution injectée ne correspond pas à un envoi de la requête, il SkippedShipment est supprimé de la solution.

La suppression de visites d'itinéraires ou d'itinéraires entiers d'une solution injectée peut avoir un effet sur les contraintes implicites, ce qui peut entraîner une modification de la solution, des erreurs de validation ou une impossibilité de résolution.

REMARQUE : L'appelant doit s'assurer que chaque Vehicle.label (resp. Shipment.label) identifie de manière unique une entité de véhicule (resp. d'envoi) utilisée dans les deux requêtes pertinentes : la requête passée qui a produit le OptimizeToursResponse utilisé dans la solution injectée et la requête actuelle qui inclut la solution injectée. Les vérifications d'unicité décrites ci-dessus ne suffisent pas à garantir cette exigence.

considerRoadTraffic

boolean

Prenez en compte l'estimation du trafic pour calculer les champs ShipmentRoute Transition.travel_duration, Visit.start_time et vehicleEndTime, pour définir le champ ShipmentRoute.has_traffic_infeasibilities et pour calculer le champ OptimizeToursResponse.total_cost.

populatePolylines

boolean

Si la valeur est "true", les polylignes seront renseignées dans les ShipmentRoute de réponse.

populateTransitionPolylines

boolean

Si la valeur est "true", les polylignes et les jetons de route seront renseignés dans la réponse ShipmentRoute.transitions.

allowLargeDeadlineDespiteInterruptionRisk

boolean

Si cette option est définie, la requête peut avoir un délai avant expiration (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 élevé (mais toujours faible).

useGeodesicDistances

boolean

Si la valeur est "true", les distances de trajet seront calculées à l'aide des distances géodésiques au lieu des distances Google Maps, et les temps de trajet seront calculés à l'aide des distances géodésiques avec une vitesse définie par geodesicMetersPerSecond.

label

string

Libellé pouvant être utilisé pour identifier cette requête, renvoyé dans le OptimizeToursResponse.request_label.

geodesicMetersPerSecond

number

Lorsque useGeodesicDistances est défini sur "true", ce champ doit être défini et définit la vitesse appliquée pour calculer les temps de trajet. Sa valeur doit être d'au moins 1,0 mètre/seconde.

maxValidationErrors

integer

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 d'erreur BadRequest (https://cloud.google.com/apis/design/errors#error_details), sauf si solvingMode=VALIDATE_ONLY : consultez le champ OptimizeToursResponse.validation_errors. La valeur par défaut est de 100,et la limite est de 10 000.

Corps de la réponse

Si la requête aboutit, le corps de la réponse contient une instance de Operation.

Champs d'application des autorisations

Requiert le niveau d'accès OAuth suivant :

  • https://www.googleapis.com/auth/cloud-platform

Autorisations IAM

Nécessite l'autorisation IAM suivante sur la ressource parent :

  • routeoptimization.operations.create

Pour en savoir plus, consultez la documentation IAM.