Method: projects.locations.optimizeToursLongRunning

Questa è una variante del metodo locations.optimizeTours progettata per le ottimizzazioni con valori di timeout elevati. Dovrebbe essere preferito al metodo locations.optimizeTours per le ottimizzazioni che richiedono più di qualche minuto.

L'oggetto long-running operation (LRO) restituito avrà un nome nel formato <parent>/operations/<operation_id> e può essere utilizzato per monitorare l'avanzamento del calcolo. Il tipo di campo metadata è OptimizeToursLongRunningMetadata. In caso di esito positivo, il tipo di campo response è OptimizeToursResponse.

Richiesta HTTP

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

L'URL utilizza la sintassi di transcodifica gRPC.

Parametri di percorso

Parametri
parent

string

Obbligatorio. Progetto o località di destinazione per effettuare una chiamata.

Formato:

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

I valori {location-id} regionali non sono supportati.

Corpo della richiesta

Il corpo della richiesta contiene dati con la seguente struttura:

Rappresentazione 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
}
Campi
timeout

string (Duration format)

Se questo timeout è impostato, il server restituisce una risposta prima che sia trascorso il periodo di timeout o che venga raggiunta la scadenza del server per le richieste sincrone, a seconda di quale evento si verifica per primo.

Per le richieste asincrone, il server genererà una soluzione (se possibile) prima della scadenza del timeout.

model

object (ShipmentModel)

Modello di spedizione da risolvere.

solvingMode

enum (SolvingMode)

Per impostazione predefinita, la modalità di risoluzione è DEFAULT_SOLVE (0).

searchMode

enum (SearchMode)

Modalità di ricerca utilizzata per risolvere la richiesta.

injectedFirstSolutionRoutes[]

object (ShipmentRoute)

Guida l'algoritmo di ottimizzazione nella ricerca di una prima soluzione simile a una soluzione precedente.

Il modello viene vincolato quando viene creata la prima soluzione. Tutte le spedizioni non eseguite su un percorso vengono implicitamente ignorate nella prima soluzione, ma possono essere eseguite nelle soluzioni successive.

La soluzione deve soddisfare alcune ipotesi di validità di base:

  • per tutte le route, vehicleIndex deve essere compreso nell'intervallo e non deve essere duplicato.
  • Per tutte le visite, shipmentIndex e visitRequestIndex devono essere compresi nell'intervallo.
  • una spedizione può essere indicata in un solo percorso.
  • Il ritiro di una spedizione di ritiro e consegna deve essere eseguito prima della consegna.
  • non è possibile eseguire più di un'alternativa di ritiro o di consegna di una spedizione.
  • per tutti i percorsi, i tempi aumentano (ovvero, vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime).
  • una spedizione può essere eseguita solo su un veicolo consentito. Un veicolo è consentito se Shipment.allowed_vehicle_indices è vuoto o se il relativo vehicleIndex è incluso in Shipment.allowed_vehicle_indices.

Se la soluzione inserita non è fattibile, non viene necessariamente restituito un errore di convalida, ma potrebbe essere restituito un errore che indica l'infattibilità.

injectedSolutionConstraint

object (InjectedSolutionConstraint)

Vincola l'algoritmo di ottimizzazione per trovare una soluzione finale simile a una soluzione precedente. Ad esempio, può essere utilizzato per bloccare parti di percorsi già completati o che devono essere completati, ma non devono essere modificati.

Se la soluzione inserita non è fattibile, non viene necessariamente restituito un errore di convalida, ma potrebbe essere restituito un errore che indica l'infattibilità.

refreshDetailsRoutes[]

object (ShipmentRoute)

Se non è vuoto, i percorsi specificati verranno aggiornati senza modificare la sequenza di visite o i tempi di percorrenza sottostanti: verranno aggiornati solo gli altri dettagli. Questo non risolve il modello.

A partire da novembre 2020, questo campo compila solo le polilinee dei percorsi non vuoti e richiede che populatePolylines sia true.

I campi routePolyline dei percorsi trasmessi potrebbero non essere coerenti con il percorso transitions.

Questo campo non deve essere utilizzato insieme a injectedFirstSolutionRoutes o injectedSolutionConstraint.

Shipment.ignore e Vehicle.ignore non hanno alcun effetto sul comportamento. Le polilinee vengono comunque compilate tra tutte le visite in tutti i percorsi non vuoti, indipendentemente dal fatto che le spedizioni o i veicoli correlati vengano ignorati.

interpretInjectedSolutionsUsingLabels

boolean

Se true:

Questa interpretazione si applica ai campi injectedFirstSolutionRoutes, injectedSolutionConstraint e refreshDetailsRoutes. Può essere utilizzato quando gli indici di spedizione o veicolo nella richiesta sono cambiati dalla creazione della soluzione, ad esempio perché le spedizioni o i veicoli sono stati rimossi o aggiunti alla richiesta.

Se true, le etichette nelle seguenti categorie devono essere visualizzate al massimo una volta nella loro categoria:

Se un vehicleLabel nella soluzione inserita non corrisponde a un veicolo della richiesta, il percorso corrispondente viene rimosso dalla soluzione insieme alle relative visite. Se un shipmentLabel nella soluzione inserita non corrisponde a una spedizione della richiesta, la visita corrispondente viene rimossa dalla soluzione. Se un SkippedShipment.label nella soluzione inserita non corrisponde a una spedizione della richiesta, il SkippedShipment viene rimosso dalla soluzione.

La rimozione di visite di un percorso o di interi percorsi da una soluzione inserita potrebbe avere un effetto sui vincoli impliciti, il che potrebbe portare a una modifica della soluzione, a errori di convalida o all'impossibilità di esecuzione.

NOTA: il chiamante deve assicurarsi che ogni Vehicle.label (risp. Shipment.label) identifica in modo univoco un'entità veicolo (risp. spedizione) utilizzata nelle due richieste pertinenti: la richiesta passata che ha generato il OptimizeToursResponse utilizzato nella soluzione inserita e la richiesta corrente che include la soluzione inserita. I controlli di unicità descritti sopra non sono sufficienti per garantire questo requisito.

considerRoadTraffic

boolean

Considera la stima del traffico nel calcolo dei campi ShipmentRoute Transition.travel_duration, Visit.start_time e vehicleEndTime, nell'impostazione del campo ShipmentRoute.has_traffic_infeasibilities e nel calcolo del campo OptimizeToursResponse.total_cost.

populatePolylines

boolean

Se impostato su true, le polilinee verranno inserite negli elementi ShipmentRoute della risposta.

populateTransitionPolylines

boolean

Se true, le polilinee e i token di percorso verranno compilati nella risposta ShipmentRoute.transitions.

allowLargeDeadlineDespiteInterruptionRisk

boolean

Se questo campo è impostato, la richiesta può avere una scadenza (vedi https://grpc.io/blog/deadlines) fino a 60 minuti. In caso contrario, la scadenza massima è di soli 30 minuti. Tieni presente che le richieste di lunga durata presentano un rischio di interruzione significativamente maggiore (ma comunque ridotto).

useGeodesicDistances

boolean

Se true, le distanze di viaggio verranno calcolate utilizzando le distanze geodetiche anziché quelle di Google Maps e i tempi di percorrenza verranno calcolati utilizzando le distanze geodetiche con una velocità definita da geodesicMetersPerSecond.

label

string

Etichetta che può essere utilizzata per identificare questa richiesta, riportata in OptimizeToursResponse.request_label.

geodesicMetersPerSecond

number

Quando useGeodesicDistances è true, questo campo deve essere impostato e definisce la velocità applicata per calcolare i tempi di percorrenza. Il valore deve essere almeno pari a 1,0 metri/secondi.

maxValidationErrors

integer

Tronca il numero di errori di convalida restituiti. Questi errori sono in genere allegati a un payload di errore INVALID_ARGUMENT come dettaglio dell'errore BadRequest (https://cloud.google.com/apis/design/errors#error_details), a meno che solvingMode=VALIDATE_ONLY: consulta il campo OptimizeToursResponse.validation_errors. Il valore predefinito è 100 e il limite massimo è 10.000.

Corpo della risposta

In caso di esito positivo, il corpo della risposta contiene un'istanza di Operation.

Ambiti di autorizzazione

Richiede il seguente ambito OAuth:

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

Autorizzazioni IAM

Richiede la seguente autorizzazione IAM per la risorsa parent:

  • routeoptimization.operations.create

Per saperne di più, consulta la documentazione di IAM.